如何在 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 的属性。只有明确地使它们 var
或 val
才会发生这种情况。不过,您可以在与初始化相关的任何内容中访问这些简单参数,例如:
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)
}
}
这是我的代码。
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 的属性。只有明确地使它们 var
或 val
才会发生这种情况。不过,您可以在与初始化相关的任何内容中访问这些简单参数,例如:
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)
}
}