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

标签 syntax kotlin synchronization singleton android-volley

在这个示例中,我不了解如何从Android documentation中为INSTANCE变量分配值

MySingleton constructor(context: Context) {
companion object {
    @Volatile
    private var INSTANCE: MySingleton? = null
    fun getInstance(context: Context) =
            INSTANCE ?: synchronized(this) {
                INSTANCE ?: MySingleton(context)
            }
}

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

最佳答案

其实...

It seems like there should be some equal signs in there instead of colons.



你是绝对正确的!这个例子是错误的!它将转换为以下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 }
            }
    }
}

关于syntax - 需要帮助来了解android.volley.requestQueue文档示例的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546056/

相关文章:

java - 在 Java 中的 int 数组中使用单引号打印空间问题

python - 一种用于跟踪数据库中表历史记录的命令行/API 工具,它是否存在,或者我应该去开发一个吗?

java - 简单的Java并发问题

java - 如何从集合中返回多个元素?

gradle - Ktor启动示例错误

java - Android 可分块对象在 Activity 之间克隆

ruby .拒绝!与.delete_if

表达式的 java 语法(仅限 JDK7)

python - 在 Python 生成器中使用 for...else

android - 导入 com.google.android.gms.auth.api.Auth 的未解决引用