2016-07-07 20 views
12

Jak zrobić nieruchomość w Kotlinie, która ma prywatny kupiec (lub po prostu jej nie ma), ale ma osobę publiczną?Prywatny nabywca i podmiot publiczny dla nieruchomości w Kotlin

var status 
private get 

nie działa z powodu błędu: Getter visibility must be the same as property visibility

w moim przypadku, powodem jest współdziałanie Java: Chcę mojego kodu Java, aby móc wywołać setStatus ale nie getStatus.

+0

Po prostu ciekawy: dlaczego chcesz to zrobić? Pole tylko do zapisu? – Fildor

+0

private get oznacza korzystanie z nieruchomości bezpośrednio na zajęciach, prawda? –

+0

Tak. Pole tylko do zapisu. Jest czytany tylko z klasy. – yuku

Odpowiedz

9

To niemożliwe w tej chwili w Kotlin mieć nieruchomość na setter, który jest bardziej widoczny niż nieruchomości. W narzędziu do śledzenia problemów masz do czynienia z problemem projektowania języka, możesz go oglądać/głosować lub udostępniać swoje przypadki użycia: https://youtrack.jetbrains.com/issue/KT-3110

11

W obecnej wersji Kotlin (1.0.3) jedynym rozwiązaniem jest mieć osobny seter metoda tak:

class Test { 
    private var name: String = "name" 

    fun setName(name: String) { 
     this.name = name 
    } 
} 

Jeśli chcesz ograniczyć dostęp do zewnętrznych bibliotek getter można użyć internal widoczność modyfikator pozwala nadal używać składni właściwość w bibliotece:

class Test { 
    internal var name: String = "name" 
    fun setName(name: String) { this.name = name } 
} 

fun usage(){ 
    val t = Test() 
    t.name = "New" 
} 
+1

Podobnie jak dodatek, jeśli masz zamiar używać kodu Java, słowo kluczowe wewnętrzne staje się w końcu jawne w świecie Java. –