需要帮助来了解android.volley.requestQueue文档示例的语法

时间:2018-07-26 19:14:07

标签: syntax kotlin synchronization singleton android-volley

在此示例中,我不了解如何为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)
            }
}

我了解代码的作用;我只是不了解语法。似乎那里应该有一些相等的迹象。

1 个答案:

答案 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 }
            }
    }
}