Kotlin:具有mutable的class实现的不可变属性的接口

我有以下代码:

  • 在@ConfigurationProperties类需要遵循具有可变属性的JavaBeans约定的Spring中有一个限制。

而不是注入可变的TokenConfigurationConfig我们注入接口。

public interface TokenAuthenticationConfig { public fun apiKey() : String } @Component @ConfigurationProperties(prefix = "service.api") public open class TokenAuthenticationConfigImpl : TokenAuthenticationConfig { public var apiKey : String constructor() { this.apiKey = "" } override fun apiKey(): String { return this.apiKey } } 

它工作正常,但只是想知道:

  • 在Kotlin中可以用一个不可变属性来定义一个接口吗?

接口的使用将会看到该属性是不可变的,而类的用户会认为它是可变的。

是的,这绝对是可以定义这样一个接口和一个类。

Kotlin中的任何(公开可见的)属性x意味着由编译器生成的一对方法getX()setX(..) ,以满足Java约定。 也就是说,您可以在类中重写getX并添加setX是一致的。

这里是一个例子:

 interface SomethingImmutable { val Somevar: String } class MyClass: SomethingImmutable { override var Somevar: String = "Initial Value" }