Как использовать свойство из конструктора внутри метода экземпляра в Kotin? - PullRequest
0 голосов
/ 29 февраля 2020

Это мой код.

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]
    }
}

Есть ли способ получить доступ к свойствам из конструктора внутри функций или мне нужно сделать их экземпляром / локальной переменной?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2020

Параметры простого конструктора не становятся свойствами вашего класса. Это происходит только путем явного изготовления их var или val. Тем не менее, вы можете получить доступ к этим простым параметрам во всем, что связано с инициализацией, например:

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

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

}

Если вам нужно получить доступ к параметру после построения, он должен стать свойством, сделав его val. Если вы не хотите, чтобы кто-либо другой имел доступ к этому полю за пределами вашего класса, отметьте его как личное:

class ConstWithArg(private val param1: String) {

    fun useProp(){
        println(param1)
    }
}
3 голосов
/ 29 февраля 2020

Просто поставьте 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]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...