Kotlin属性与getter。 我可以不指定初始值吗?

我想创建一个单例类,但不幸的是,Android几乎所有东西都需要Context,所以我需要它创建一个实例。 所以我只是假设用户名为init() ,然后返回实例。 正如你在下面看到的那样,如果_instance为null,则会抛出exception,所以get方法不能返回null。

但Kotlin说我必须初始化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 .... 

一个variables属性( var )不仅是一个getter,而且是一个setter。 由于您没有提供setter,所以生成了一个默认的set(value) { field = value } 。 尽管在这种情况下是无用的,默认的setter使用field ,因此需要初始化。

使用lateinit属性

 public class MyTest { lateinit var subject: TestSubject fun setup() { subject = TestSubject() } fun test() { subject.method() } }