Kotlin: Интерфейс с неизменяемым свойством, реализуемым классом с изменчивым

У меня есть следующий код:

  • Работает с ограничениями весной, где классы @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 определить интерфейс с неизменяемым свойством, который реализуется классом с изменчивым свойством.

Использование интерфейса показало бы, что свойство является неизменным, в то время как пользователи класса рассматривают его как изменяемое.

Да, определенно можно определить такой интерфейс и класс.

Любое (общедоступное) свойство x в Kotlin означает пару методов getX() и setX(..) , сгенерированных компилятором для удовлетворения соглашения Java. Тем не менее, можно утверждать, что вы можете переопределить getX в классе и добавить setX .

Вот пример:

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