如何在 Kotlin 的实例方法中使用构造函数中的 属性?

How to use a property from a constructor inside an instance method in Kotin?

这是我的代码。

class Repository(context: Context) {

    // Can access 'context' from here
    val mSharedPrefsProperties = context
        .getSharedPreferences(context.packageName.plus(".properties"), Context.MODE_PRIVATE)

    // Can't access 'context' in this function (unresolved reference: context)
    private fun getApiKey(): String {
        val apiKeys = context.resources.getStringArray(R.array.api_keys)
        val random = Random().nextInt(apiKeys.size)
        return apiKeys[random]
    }
}

有没有办法从函数内部的构造函数访问属性,或者我是否需要将它们设为 instance/local 变量?

只需将 var(或 val)放在参数上

class Repository(var context: Context) {

    // Can access 'context' from here
    val mSharedPrefsProperties = context
        .getSharedPreferences(context.packageName.plus(".properties"), Context.MODE_PRIVATE)

    // Can't access 'context' in this function (unresolved reference: context)
    private fun getApiKey(): String {
        val apiKeys = context.resources.getStringArray(R.array.api_keys)
        val random = Random().nextInt(apiKeys.size)
        return apiKeys[random]
    }
}

简单的构造函数参数不会成为 class 的属性。只有明确地使它们 varval 才会发生这种情况。不过,您可以在与初始化相关的任何内容中访问这些简单参数,例如:

class ConstWithArg(param1: String) {
    init {
        println(param1)
    }

    val field1 = param1.length
    var field2 = param1.length

}

如果您需要在构造后访问参数,则应通过将其设为 val 使其变为 属性。如果您不希望其他人在您 class 之外访问此字段,请将其标记为私有:

class ConstWithArg(private val param1: String) {

    fun useProp(){
        println(param1)
    }
}