这是我的代码。
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]
}
}
有没有一种方法可以从函数内部的构造函数访问属性,或者我需要将它们作为实例/局部变量?
只需将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]
}
}
简单的构造函数参数不会成为类的属性。这只能通过明确地使它们成为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)
}
}