我有一些Volley类,当我从MainActivity初始化它时,我将context
和expectedHosname
值传递给它:
VolleySingleton.getInstance(context, expectedHosname).addToRequestQueue(request)
启动应用后,expectedHostname
可以根据用户的喜好进行更改,但是expectedHostname
在类VolleySingleton
中始终过时并且具有启动值。它看起来像是用第一个值编译的,当我通过VolleySingleton.getInstance(..., ...)
传递新值时,它不会改变。
据我所知,可以使用var
关键字声明Kotlin中的属性,并且此变量具有隐式的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()
}
我有一些Volley类,当我从MainActivity对其进行初始化时,我向其传递了上下文和ExpectedHosname值:VolleySingleton.getInstance(context,ExpectedHosname).addToRequestQueue(request)...
是,expectedHostname
有一个setter。但是您不会在任何地方设置它;如果在调用INSTANCE
时getInstance
已经不为空,则只需返回即可。有点像