如何使用伴随对象正确地将可变变量传递给 kotlin class?

How correctly pass changeable variable to kotlin class with companion object?

我有一些 Volley class,当我从 MainActivity 初始化它时,我将 contextexpectedHosname 值传递给它:

VolleySingleton.getInstance(context, expectedHosname).addToRequestQueue(request)

应用程序启动后 expectedHostname 可以根据用户偏好进行更改,但 expectedHostname 在 class VolleySingleton 中始终是过时的并且具有启动值。看起来它是用第一个值编译的,当我通过 VolleySingleton.getInstance(..., ...).

传递新值时它不会改变

据我所知,Kotlin 中的属性可以使用 var 关键字声明,并且此变量具有隐式 getter 和 setter。所以我不明白为什么 expectedHosname 像常量一样工作。可能我必须更改我的伴随对象..?

class

的片段
class VolleySingleton constructor(context: Context, private var expectedHostname: String) {
    companion object {
        @Volatile
        private var INSTANCE: VolleySingleton? = null
        fun getInstance(context: Context, expectedHostname: String) =
            INSTANCE ?: synchronized(this) {
                INSTANCE ?: VolleySingleton(context, expectedHostname).also {
                    INSTANCE = it
                }
            }
    }

    private fun sslSocketFactory(context: Context, expectedHost: String): SSLSocketFactory {
         // magic with expectedHost var
    }

    //OR
    private val foo: String = expectedHost.toUpperCase()
}

是的,expectedHostname 有一个 setter。但是您没有将其设置在任何地方;如果当你调用 getInstanceINSTANCE 已经是非空的,你只需 return 它。像

fun getInstance(context: Context, expectedHostname: String) =
    (INSTANCE ?: synchronized(this) {
        INSTANCE ?: VolleySingleton(context, expectedHostname).also {
            INSTANCE = it
        }
    }).also { it.expectedHostname = expectedHostname }

会起作用。