Przeciągi i setery generowane są automatycznie w Kotlin. Jeśli piszesz:
val isEmpty: Boolean
Jest równa następującego kodu Java:
private final Boolean isEmpty;
public Boolean isEmpty() {
return isEmpty;
}
W twoim przypadku prywatnej modyfikator dostępu jest zbędny - isEmpty jest domyślnie prywatne i mogą być dostępne tylko przez getter . Gdy próbujesz uzyskać właściwość isEmpty obiektu, którą wywołujesz metodę get w rzeczywistości. Aby uzyskać więcej zrozumienia pobierające/ustawiające w Kotlin: Poniżej dwa przykłady kodu są równe:
var someProperty: String = "defaultValue"
i
var someProperty: String = "defaultValue"
get() = field
set(value) { field = value }
Również chcę podkreślić, że this
w getter nie jest twoja własność - to instancja klasy. Jeśli chcesz uzyskać dostęp do wartości pola w getter lub setter można użyć słowa zastrzeżonego field
do niego:
val isEmpty: Boolean
get() = field
jeśli tylko chcą mieć sposób dostać się w publicznym dostępie - można napisać ten kod :
var isEmpty: Boolean
private set
ze względu na prywatny modyfikator w pobliżu ustawionego akcesora można ustawić tę wartość tylko w metodach wewnątrz obiektu.
'W twoim przypadku modyfikator dostępu prywatnego jest zbędny" Jak? Domyślny modyfikator słowa Kotlin doc jest jawny. https://kotlinlang.org/docs/reference/visibility-modifiers.html –
@Nothing tak wygląda pole publiczne, ale pod maską nazywasz metodę getter – Cortwave
'val isEmpty: Boolean' nie będzie się kompilować, ponieważ isEmpty nie jest jeszcze zainicjalizowane, prawda? Właśnie zaczyna się uczyć Kotlina. Co się dzieje z 'get() = field'? –