我把我的代码改成这样:
object SomeHelper{}要这样做:
@Component
class SomeHelper(private val anAttribute: AnAttributeService){}AnAttributeService看起来像这样:
@Service
class AnAttributeService(private val myLoader: MyLoader){}这是MyLoader
interface MyLoader {
fun loadSomething()
}在我的测试类中,我写了这样的代码:
class SomeHelperTester{
val cut = SomeHelper
//...
}当SomeHelper是一个对象时,它曾经工作得很好,但现在当我编写
val cut = SomeHelper(anAttribute = AnAttributeService(myLoader = MyLoader))MyLoader带有红色下划线,错误显示为Classifier MyLoader does not have a companion object, and thus must be initialized
我如何才能使这行代码工作?
发布于 2021-11-03 07:46:17
在myLoader =之后,您需要提供一个MyLoader类型的实例。你不能在那里只说MyLoader。
如果MyLoader是一个类,您可以直接将其更改为MyLoader()。但是您将MyLoader定义为一个接口,这意味着您需要为它提供一个实现。
最常见的方法是创建一个扩展接口的类,并创建该接口的一个实例。例如:
class MyLoaderImp: MyLoader {
override fun loadSomething() {
//implementation here
}
}然后你可以这样做
val cut = SomeHelper(anAttribute = AnAttributeService(myLoader = MyLoaderImp()))还要注意,在kotlin中,您不需要显式地提到参数名称,除非您以另一种顺序提供它们或省略了一些,因此这也是有效且更短的
val cut = SomeHelper(AnAttributeService(MyLoaderImp()))或者,您可以在匿名类中提供一个实现,如下所示
val cut = SomeHelper(AnAttributeService(object: MyLoader{
override fun loadSomething() {
//implementation here
}
}))在我看来,你仍然缺乏很多关于kotlin和一般编程的基础知识。我建议你研究kotlin网站上文档的一些部分,以更好地理解一切:
https://stackoverflow.com/questions/69820203
复制相似问题