java - method - Getter privado y establecimiento público para una propiedad de Kotlin
kotlin:: class java (2)
En la versión actual de Kotlin (1.0.3), la única opción es tener un método de establecimiento separado como el siguiente:
class Test {
private var name: String = "name"
fun setName(name: String) {
this.name = name
}
}
Si desea restringir el acceso de las bibliotecas externas al captador, puede utilizar internal
modificador de visibilidad internal
que le permite seguir utilizando la sintaxis de propiedad dentro de la biblioteca:
class Test {
internal var name: String = "name"
fun setName(name: String) { this.name = name }
}
fun usage(){
val t = Test()
t.name = "New"
}
¿Cómo hacer que una propiedad en Kotlin tenga un captador privado (o simplemente no la tenga) pero tenga un organismo público?
var status
private get
no funciona con un error: la Getter visibility must be the same as property visibility
En mi caso, el motivo es la interoperabilidad de Java: quiero que mi código Java pueda llamar a setStatus
pero no a getStatus
.
Es imposible en este momento en Kotlin tener una propiedad con un setter que sea más visible que la propiedad. Hay un problema de diseño de idioma en el rastreador de problemas, siéntase libre de verlo / votar o compartir sus casos de uso: https://youtrack.jetbrains.com/issue/KT-3110