我一直在阅读Kotlin中关于properties的内容,包括自定义getter和setter。
然而,我想知道是否有可能创建一个带有额外参数的自定义getter。
例如,考虑Java中的以下方法:
public String getDisplayedValue(Context context) {
if (PrefUtils.useImperialUnits(context)) {
// return stuff
} else {
// return other stuff
}
}
- 请注意,
PrefUtils
中的静态方法必须将Context
作为参数,因此不能删除它。*
我想这样写在Kotlin:
val displayedValue: String
get(context: Context) {
return if (PrefUtils.useImperialUnits(context)) {
// stuff
} else {
// other stuff
}
}
但是我的IDE用红色突出显示了所有这些。
我知道我可以在类中创建一个函数来获取显示的值,但这意味着我还必须在Kotlin中使用.getDisplayedValue(Context)
,而不是像.displayedValue
那样通过名称引用属性。
有没有办法创建这样的自定义getter?
编辑:如果没有,最好是为此编写一个函数,还是将Context
传递到类构造函数的参数中?
3条答案
按热度按时间j5fpnvbx1#
据我所知,属性getter不能有参数,写一个函数代替。
gdx19jrr2#
为此,可以使用一个属性,该属性返回一个中间对象,该中间对象包含带有所需参数的get和/或set运算符,而不是直接返回值。
让中间对象成为一个内部类示例可能有助于提供对父对象的轻松访问。然而,在接口中不能使用内部类,因此在这种情况下,在构造中间对象时,可能需要提供一个引用父对象的显式构造函数参数。
例如:
e5njpo683#
例如,您可以执行以下操作: