mam następujące klasy Kotlin na Androida:Kotlin - Jak zrobić pole tylko do odczytu dla klas zewnętrznych
class ThisApplication: Application() {
lateinit var network: INetwork
override fun onCreate() {
super.onCreate()
network = Network()
}
}
Teraz każda klasa zewnętrzna może uzyskać INetwork odwołanie po prostu robi:
application.network
jednak, że także umożliwia klasa zewnętrzny, aby zastąpić tę wartość:
application.network = myNewNetworkReference
I chcesz uniknąć drugiej opcji. Niestety, nie mogę utworzyć pola val
, ponieważ jego inicjalizacja musi nastąpić wewnątrz wywołania zwrotnego onCreate
.
Myślałem także o zrobieniu pole prywatne i narażając go przez funkcję, jak ten:
private lateinit var network: INetwork
fun getNetwork() = network
Jednak kto nazywa getNetwork() nadal można przypisać nową wartość do niego tak:
application.getNetwork() = myNewNetworkReference
Jak ustawić, aby pole sieciowe było tylko do odczytu według klas zewnętrznych? A może jeszcze lepiej, czy jest jakiś sposób, aby to uczynić val
, mimo że nie mogę go zainicjować wewnątrz konstruktora?
To nieprawda, że osoba wywołująca metodę może ponownie przypisać wartość tej metody. 'application.getNetwork() = myNewNetworkReference' nie skompilowałoby się. – yole