首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Kotlin -将对象更改为类并出现错误

Spring Kotlin -将对象更改为类并出现错误
EN

Stack Overflow用户
提问于 2021-11-03 05:51:33
回答 1查看 19关注 0票数 0

我把我的代码改成这样:

代码语言:javascript
复制
object SomeHelper{}

要这样做:

代码语言:javascript
复制
@Component 
class SomeHelper(private val anAttribute: AnAttributeService){}

AnAttributeService看起来像这样:

代码语言:javascript
复制
@Service
class AnAttributeService(private val myLoader: MyLoader){}

这是MyLoader

代码语言:javascript
复制
interface MyLoader {
  fun loadSomething()
}

在我的测试类中,我写了这样的代码:

代码语言:javascript
复制
class SomeHelperTester{
val cut = SomeHelper
//...
}

当SomeHelper是一个对象时,它曾经工作得很好,但现在当我编写

代码语言:javascript
复制
val cut = SomeHelper(anAttribute = AnAttributeService(myLoader = MyLoader))

MyLoader带有红色下划线,错误显示为Classifier MyLoader does not have a companion object, and thus must be initialized

我如何才能使这行代码工作?

EN

回答 1

Stack Overflow用户

发布于 2021-11-03 07:46:17

myLoader =之后,您需要提供一个MyLoader类型的实例。你不能在那里只说MyLoader

如果MyLoader是一个类,您可以直接将其更改为MyLoader()。但是您将MyLoader定义为一个接口,这意味着您需要为它提供一个实现。

最常见的方法是创建一个扩展接口的类,并创建该接口的一个实例。例如:

代码语言:javascript
复制
class MyLoaderImp: MyLoader {
    override fun loadSomething() {
        //implementation here
    }
}

然后你可以这样做

代码语言:javascript
复制
val cut = SomeHelper(anAttribute = AnAttributeService(myLoader = MyLoaderImp()))

还要注意,在kotlin中,您不需要显式地提到参数名称,除非您以另一种顺序提供它们或省略了一些,因此这也是有效且更短的

代码语言:javascript
复制
val cut = SomeHelper(AnAttributeService(MyLoaderImp()))

或者,您可以在匿名类中提供一个实现,如下所示

代码语言:javascript
复制
val cut = SomeHelper(AnAttributeService(object: MyLoader{
    override fun loadSomething() {
        //implementation here
    }
}))

在我看来,你仍然缺乏很多关于kotlin和一般编程的基础知识。我建议你研究kotlin网站上文档的一些部分,以更好地理解一切:

https://kotlinlang.org/docs/home.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69820203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档