Kotlin: Public get private set var

125

¿Cuál es la forma correcta de definir una var en kotlin que tiene un captador público y un setter privado (solo modificable internamente)?

Jasper Blues
fuente

Respuestas:

193
var setterVisibility: String = "abc" // Initializer required, not a nullable type
    private set // the setter is private and has the default implementation

Ver: Propiedades Getter y Setter

D3xter
fuente
13
Tenga en cuenta que private setdebe estar en una nueva línea.
Jasper Blues
29
... o en la misma línea, después de un punto y coma:var abc: String = ""; private set
Boris B.
4
Sin embargo, no sé qué hacer con un campo de constructor principal.
androidguy
2
@ user3175580 Esto no es posible. Use un campo local dentro del constructor principal y luego asigne el valor a la propiedad como "class Foo (_bar: String) {var bar: String = _bar}
D3xter
3
@JasperBlues ... de lo contrario, debe agregar punto y coma antes private set.
Moses Aprico
7

Puede hacerlo fácilmente utilizando el siguiente enfoque :

var atmosphericPressure: Double = 760.0
    get() = field
    private set(value) { 
        field = value 
    }

Mire esta publicación en Medium: Property, Getter y Setter en Kotlin .

Espero que esto ayude.

Andy Fedoroff
fuente
2

var name : String = "Peter"
    private set

De forma predeterminada, todas las propiedades y funciones son públicas en Kotlin. Por lo tanto, el establecedor debe declararse explícitamente privado mientras que el captador es público de forma predeterminada.

JGPhilip
fuente