Недвижимость Котлина с геттером. Могу ли я указать начальное значение?

Я хочу создать одноэлементный класс, но, к сожалению, Android нуждается в Контексте почти для чего-то, поэтому мне нужно создать экземпляр. Поэтому я просто предположил, что пользователь вызвал init() , а затем вернул экземпляр. Как вы видите ниже, если значение _instance равно null, будет _instance исключение, поэтому метод get не может вернуть значение null.

Но Котлин говорит, что я должен инициализировать instance . Дело в том, что MyClass нельзя создать без контекста. Поэтому я не хочу указывать начальное значение. Как я могу это сделать?

 companion object { protected var _instance:MyClass? = null; fun init(context:Context) { _instance = MyClass(context) } var instance:MyClass //<---This causes a compile error. get() { if(_instance==null) throw RuntimeException("Call init() first."); return _instance!!; } } 

Измените var на val и он должен работать:

 .... val instance: MyClass .... 

Свойство variable ( var ) не только принимает геттер, но и сеттер. Поскольку вы не указали сеттер, по умолчанию был создан set(value) { field = value } . Несмотря на бесполезность в этой ситуации, установщик по умолчанию использует field , поэтому требует его инициализации.

Использовать свойство lateinit

 public class MyTest { lateinit var subject: TestSubject fun setup() { subject = TestSubject() } fun test() { subject.method() } } 
Intereting Posts
Как понять забаву с = в Котлине? Какой из них лучший объект или верхняя функция в Котлине? Как использовать фрагменты с kotlin Как я могу сделать эту функцию функциональным способом программирования? Мой проект Kotlin Не удается разрешить зависимости от Travis-CI Почему универсальное типизированное свойство обнуляется? Элементарные функции в котлине Как сделать многосвязывание с помощью контейнера поиска зависимостей Kodein? Kotlin: Как получить доступ к полю из другого класса? ClassCastException: android.inputmethodservice.KeyboardView не может быть добавлен в com.support.mukhtar.simplekeyboard.CustomKeyboardView android Котлин: лямбда никогда не компилируется Не удалось найти ссылочный класс kotlin.internal.annotations.AvoidUninitializedObjectCopyingCheck Android Kotlin Realm Правильный способ запроса + вернуть неуправляемые элементы в Bg Thread Как скомпилировать и использовать код Kotlin во время выполнения? Неправильная позиция PopupWindow внутри RecyclerView после notifyItemChanged