Tôi có lớp sau Kotlin trên Android:Kotlin - Làm thế nào để làm cho lĩnh vực read-only cho các lớp bên ngoài
class ThisApplication: Application() {
lateinit var network: INetwork
override fun onCreate() {
super.onCreate()
network = Network()
}
}
Bây giờ, bất kỳ lớp bên ngoài có thể nhận được INetwork tài liệu tham khảo bằng cách đơn giản thực hiện:
application.network
Tuy nhiên, đó cũng làm cho nó có thể cho một lớp bên ngoài để ghi đè lên giá trị đó:
application.network = myNewNetworkReference
tôi muốn tránh tùy chọn thứ hai. Thật không may, tôi không thể tạo trường val
vì khởi tạo của nó cần xảy ra bên trong cuộc gọi lại onCreate
.
Tôi cũng nghĩ về việc làm lĩnh vực tư nhân và phơi bày nó thông qua một chức năng, như thế này:
private lateinit var network: INetwork
fun getNetwork() = network
Tuy nhiên, bất cứ ai gọi getNetwork() vẫn có thể gán một giá trị mới cho nó, như vậy:
application.getNetwork() = myNewNetworkReference
Tôi làm cách nào để trường chỉ có thể đọc được trường mạng? Hoặc thậm chí tốt hơn, có cách nào để làm cho nó val
mặc dù tôi không thể khởi tạo nó bên trong một nhà xây dựng?
Không đúng khi người gọi phương thức có thể gán lại giá trị của phương pháp này. 'application.getNetwork() = myNewNetworkReference' sẽ không biên dịch. – yole