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" }