在此示例中,我不了解如何为INSTANCE变量分配一个值,该值取自Android documentation
MySingleton constructor(context: Context) {
companion object {
@Volatile
private var INSTANCE: MySingleton? = null
fun getInstance(context: Context) =
INSTANCE ?: synchronized(this) {
INSTANCE ?: MySingleton(context)
}
}
我了解代码的作用;我只是不了解语法。似乎那里应该有一些相等的迹象。
答案 0 :(得分:0)
实际上...
似乎那里应该有一些等号而不是冒号。
您绝对正确!这个例子是错误的!它将转换为以下Java代码:
private static volatile MySingleton INSTANCE;
public static MySingleton getInstance(Context context) {
if(INSTANCE != null) {
return INSTANCE;
} else {
synchronized(this) {
if(INSTANCE != null) {
return INSTANCE;
}
return new MySingleton(context);
}
}
}
因此,如您所见,INSTANCE变量从未真正设置过。 -_-
应该是:
class MySingleton(context: Context) {
companion object {
@Volatile @JvmField private var INSTANCE: MySingleton? = null
fun getInstance(context: Context) =
INSTANCE ?: synchronized(this) {
INSTANCE ?: MySingleton(context).also { INSTANCE = it }
}
}
}