如何将可变变量与伴随对象正确传递给kotlin类?

问题描述 投票:0回答:1

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

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)...

class kotlin android-volley var
1个回答
0
投票

是,expectedHostname有一个setter。但是您不会在任何地方设置它;如果在调用INSTANCEgetInstance已经不为空,则只需返回即可。有点像

© www.soinside.com 2019 - 2024. All rights reserved.