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() } }