Kotlin:与不可变 属性 的接口由 class 与可变实现
Kotlin : Interface with immutable property implemented by class with mutable
我有以下代码:
- 解决了 Spring 中的一个限制,其中 @ConfigurationProperties classes 需要遵循具有可变属性的 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 中是否可以定义一个具有不可变 属性 的接口,该接口由 class 和可变 属性 实现。
接口的使用会将 属性 视为不可变的,而 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"
}
我有以下代码:
- 解决了 Spring 中的一个限制,其中 @ConfigurationProperties classes 需要遵循具有可变属性的 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 中是否可以定义一个具有不可变 属性 的接口,该接口由 class 和可变 属性 实现。
接口的使用会将 属性 视为不可变的,而 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"
}