【问题标题】:Passing parameters to a custom getter in kotlin将参数传递给kotlin中的自定义getter
【发布时间】:2016-08-05 06:57:28
【问题描述】:

我一直在阅读 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),而不是像 @ 中那样按名称引用属性987654327@.

有没有办法像这样创建自定义 getter?

编辑:如果没有,最好为此编写一个函数,还是将Context 传递给类构造函数的参数?

【问题讨论】:

  • 完全一样的场景!这是一个小世界,谢谢你先问:P

标签: kotlin


【解决方案1】:

据我所知,属性 getter 不能有参数。而是写一个函数。

【讨论】:

  • Context 传递到类构造函数的参数中以用于自定义getter 会是不好的做法吗?
  • 这不是最简单的方法,但是如果你需要一个属性的语法,那就去做吧
【解决方案2】:

你可以这样做:

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

【讨论】:

  • 在你的例子中,属性必须放在有上下文的地方,但是他的例子(java方法)不依赖于上下文,因为它是作为参数传递的。
  • 你为什么要先把它分配给newString?你可以直接调用 context.getString
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多