Kotlin: Public get private set var

125

Apa cara yang benar untuk mendefinisikan var di kotlin yang memiliki pengambil publik dan penyetel privat (hanya dapat dimodifikasi secara internal)?

Jasper Blues
sumber

Jawaban:

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

Lihat: Properties Getter and Setter

D3xter
sumber
13
Perhatikan bahwa private setharus di baris baru.
Jasper Blues
29
... atau di baris yang sama, setelah titik koma:var abc: String = ""; private set
Boris B.
4
Saya bingung apa yang harus saya lakukan dengan bidang konstruktor utama.
androidguy
2
@ user3175580 Ini tidak mungkin. Gunakan bidang lokal di dalam konstruktor utama dan kemudian tetapkan nilai ke properti seperti "class Foo (_bar: String) {var bar: String = _bar}
D3xter
3
@JasperBlues ... jika tidak, Anda perlu menambahkan titik koma sebelumnya private set.
Moses Aprico
7

Anda dapat dengan mudah melakukannya menggunakan pendekatan berikut :

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

Lihat posting ini di Medium: Property, Getter and Setter di Kotlin .

Semoga ini membantu.

Andy Fedoroff
sumber
2

var name : String = "Peter"
    private set

Secara default, semua properti dan fungsi bersifat publik di Kotlin. Oleh karena itu, penyetel harus secara eksplisit dinyatakan sebagai pribadi sementara pengambil bersifat publik secara default.

JGPhilip
sumber