Kotlin: Public get private set var

126

Qual é a maneira correta de definir um var no kotlin que tem um getter público e um setter privado (apenas modificável internamente)?

Jasper Blues
fonte

Respostas:

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

Veja: Propriedades Getter e Setter

D3xter
fonte
13
Observe que private setdeve estar em uma nova linha.
Jasper Blues
30
... ou na mesma linha, após um ponto e vírgula:var abc: String = ""; private set
Boris B.
4
No entanto, estou sem saber o que fazer com um campo de construtor primário.
androidguy
2
@ user3175580 Isso não é possível. Use um campo local dentro do construtor primário e atribua o valor à propriedade como "class Foo (_bar: String) {var bar: String = _bar}
D3xter
3
@JasperBlues ... caso contrário, você precisa adicionar ponto-e-vírgula antes private set.
Moses Aprico
7

Você pode fazer isso facilmente usando a seguinte abordagem :

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

Veja esta postagem no Medium: Property, Getter e Setter em Kotlin .

Espero que isto ajude.

Andy Fedoroff
fonte
3

var name : String = "Peter"
    private set

Por padrão, todas as propriedades e funções são públicas no Kotlin. Portanto, o setter deve ser explicitamente declarado privado, enquanto o getter é público por padrão.

JGPhilip
fonte