Class 如何正确地将可变变量传递给带有伴生对象的kotlin类?
我有一些截取类,当我从MainActivity初始化它时,我将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
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 }
会有用的