将参数传递给kotlin中的自定义getter

将参数传递给kotlin中的自定义getter,kotlin,Kotlin,我一直在阅读关于Kotlin的文章,包括自定义getter和setter 然而,我想知道是否有可能创建一个带有额外参数的自定义getter 例如,在java中考虑以下方法: public String getDisplayedValue(Context context) { if (PrefUtils.useImperialUnits(context)) { // return stuff } else { // return other stuf

我一直在阅读关于Kotlin的文章,包括自定义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


编辑:如果不是,最好为此编写一个函数,还是将
上下文
传递到类构造函数的参数中?

据我所知,属性getter不能有参数。改为编写函数。

您可以执行以下操作,例如:

val displayedValue: String by lazy {
     val newString = context.getString(R.string.someString)
     newString
}

Context
传递到类构造函数的参数中以用于自定义getter会是一种不好的做法吗?这不是最简单的方法,但是如果您需要属性的语法,那么在您的示例中,属性必须放在有上下文的某个位置,而他的示例(java方法)作为参数传递时不依赖于上下文。为什么首先将其分配给newString?您可以直接调用context.getString