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

Я хочу создать одноэлементный класс, но, к сожалению, 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() } }