我想创建一个单例类,但不幸的是,Android几乎需要几乎任何东西,所以我需要它来创建一个实例。所以我假设用户名为init()
,然后返回实例。如下所示,如果_instance
为null,则抛出异常,因此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!!;
}
}
答案 0 :(得分:4)
将var
更改为val
,它应该有效:
....
val instance: MyClass
....
变量属性(var
)不仅假定是getter,还是setter。由于您未提供setter,因此生成了一个默认值set(value) { field = value }
。尽管在这种情况下无用,但默认的setter使用field
,因此需要初始化。
答案 1 :(得分:1)
使用lateinit属性
public class MyTest {
lateinit var subject: TestSubject
fun setup() {
subject = TestSubject()
}
fun test() {
subject.method()
}
}