Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如何正确地将可变变量传递给带有伴生对象的kotlin类?_Class_Kotlin_Android Volley_Var - Fatal编程技术网

Class 如何正确地将可变变量传递给带有伴生对象的kotlin类?

Class 如何正确地将可变变量传递给带有伴生对象的kotlin类?,class,kotlin,android-volley,var,Class,Kotlin,Android Volley,Var,我有一些截取类,当我从MainActivity初始化它时,我将context和expectedHosname值传递给它: VolleySingleton.getInstance(context, expectedHosname).addToRequestQueue(request) 应用程序启动后,可以根据用户偏好更改expectedHostname,但是expectedHostname在类VolleySingleton中始终过时,并且具有启动值。它看起来像是用第一个值编译的,当我通过Voll

我有一些截取类,当我从MainActivity初始化它时,我将
context
expectedHosname
值传递给它:

VolleySingleton.getInstance(context, expectedHosname).addToRequestQueue(request)
应用程序启动后,可以根据用户偏好更改
expectedHostname
,但是
expectedHostname
在类
VolleySingleton
中始终过时,并且具有启动值。它看起来像是用第一个值编译的,当我通过
VolleySingleton.getInstance(…,…)
传递新值时,它不会改变

正如我所知,Kotlin中的属性可以用
var
关键字声明,并且这个变量具有隐式getter和setter。所以我不明白为什么
expectedHosname
像常量一样工作。也许我必须改变我的同伴对象

类片段

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。但你不会把它放在任何地方;如果调用
getInstance
INSTANCE
已经非空,则只需返回它。差不多

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