Kotlin:由具有可变属性的类实现的具有不可变属性的接口

Kotlin:由具有可变属性的类实现的具有不可变属性的接口,kotlin,Kotlin,我有以下代码: 解决了Spring中@ConfigurationProperties类需要遵循JavaBeans约定和可变属性的限制 我们注入接口,而不是注入可变的TokenConfigurationConfig。 public interface TokenAuthenticationConfig { public fun apiKey() : String } @Component @ConfigurationProperties(prefix = "service.api

我有以下代码:

  • 解决了Spring中@ConfigurationProperties类需要遵循JavaBeans约定和可变属性的限制
我们注入接口,而不是注入可变的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
表示编译器为满足Java约定而生成的一对方法
getX()
setX(…)
。也就是说,您可以在类中重写
getX
,并添加
setX
,这是一致的

以下是一个例子:

interface SomethingImmutable {
    val Somevar: String
}

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

事实上,它是有效的,并且还通过添加“override”修饰符(我以前缺少这个)来强制您确认意图。