Kotlin:与不可变 属性 的接口由 class 与可变实现

Kotlin : Interface with immutable property implemented by class with mutable

我有以下代码:

我们注入接口,而不是注入可变的 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
    }
}

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

接口的使用会将 属性 视为不可变的,而 class 的用户会将其视为可变的。

是的,定义这样的接口和class绝对是可能的。

Any (publicly visible) 属性 x 在Kotlin中表示一对方法getX()setX(..),由编译器生成以满足Java 惯例。也就是说,您可以在 class 中覆盖 getX 并添加 setX.

是一致的

这是一个例子:

interface SomethingImmutable {
    val Somevar: String
}

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