Kotlin: Interfaz con propiedad inmutable implementada por class con mutable

Tengo el siguiente código:

  • Funciona alnetworkingedor de una limitación en Spring donde las classs @ConfigurationProperties deben seguir la convención JavaBeans con properties mutables.

En lugar de inyectar el TokenConfigurationConfig mutable, inyectamos la interfaz.

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

Funciona bien, pero solo me pregunto:

  • ¿Es posible en Kotlin definir una interfaz con una propiedad inmutable, que se implementa por class con una propiedad mutable?

Los usos de la interfaz verían la propiedad como inmutable, mientras que los usuarios de la class la verían como mutable.

Sí, definitivamente es posible definir dicha interfaz y una class.

Cualquier propiedad (públicamente visible) x en Kotlin significa un par de methods getX() y setX(..) , generados por el comstackdor para satisfacer la convención de Java. Dicho esto, es consistente que puede anular getX en una class y agregar setX .

Aquí hay un ejemplo:

 interface SomethingImmutable { val Somevar: String } class MyClass: SomethingImmutable { override var Somevar: String = "Initial Value" } 
  • Kotlin: ¿cómo se puede acceder externamente a las funciones de extensión dentro de un tipo?
  • Kotlin - equivalencia a SomeClass.class para objects?
  • Clase abstracta Kotlin java IllegalAccessError
  • retroajuste + desnerializador gson: retorno dentro de la matriz
  • Métodos sobrecargados que reciben funciones de order superior en Kotlin
  • Kotlin switch-statement con más de dos variables?
  • firebase db: models con properties delegadas de Kotlin
  • Tipo de valor de par universal para extras de bash
  • ¿Cómo cambia mutableMap <String, Any?> El valor a var cuando uso delegate en Kotlin?
  • Llamando countDownTimer
  • Regresar la function de object de llamada de class interna