【问题标题】:What does this Spring Component and Kotlin Class consist of? [closed]这个 Spring 组件和 Kotlin 类由什么组成? [关闭]
【发布时间】:2021-12-12 22:36:23
【问题描述】:

我这里有这门课:

@Component
class UpdateRule(
  private val rulesRepo: UpdateRuleRepo
) : UpdateRuleStoreGateway, UpdateRuleLoadGateway {

  override fun store(rule: UpdatRule) {
        //some code
  }

  override fun loadAll(): List<UpdateRule> {
        //some code
  }

由于我是 Spring 和 Kotlin 的新手,所以我不熟悉这种语法。括号内的 val 是什么意思(private val rulesRepo: UpdateRuleRepo),冒号后面的接口有什么作用(: UpdateRuleStoreGateway, UpdateRuleLoadGateway)?这是 Kotlin 特定的语法还是 Spring 特定的语法?我在哪里可以了解更多信息?

【问题讨论】:

    标签: spring kotlin


    【解决方案1】:

    这是 Kotlin 语法,不是 Spring 特有的。

    括号内的val是什么意思(private val rulesRepo: UpdateRuleRepo)

    括号() 之间的部分是类的主构造函数的参数列表。当构造函数参数被标记为val 或var 时,它也在类上声明了一个同名的属性。

    在这种情况下,这意味着rulesRepo 是类UpdateRule 的构造函数参数,同时也是该类的属性。因为它是val,这意味着该属性是只读的(它只有一个getter)。

    您可以在docs about constructors 中阅读更多相关信息。

    冒号后面的接口是做什么的(:UpdateRuleStoreGateway,UpdateRuleLoadGateway)?

    类声明中: 之后列出的类型是该类扩展(或实现)的父类(或接口)。在这种情况下,这意味着UpdateRule 实现了UpdateRuleStoreGateway 和UpdateRuleLoadGateway 两个接口。

    这在有关 implementing interfaces 的文档中有所描述。

    【讨论】:

    • 感谢您的精彩解释!
    【解决方案2】:

    Val 是 var 但简单地说是 final。最终意味着它不能重新分配给另一个对象/原始数据。但请记住,这并不意味着内部数据是不可变的。它不像 Python 元组!可以修改单个元素/成员变量,但不能重新分配整个事物(将变量视为指针,它引用的是同一个对象,尽管对象的内部细节可能会随着时间而改变)

    顺便说一下,Kotlin var 与 Java var 不同。 更多信息在这里:https://www.baeldung.com/kotlin/java-kotlin-var-difference

    我个人觉得 kotlin var 类似于 TypeScript let。

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多