2016-07-31 200 views
1

我一直在阅读有关properties在科特林,包括自定义getter和setter方法将参数传递给定制吸气。在科特林

不过,我想知道是否有可能创建一个额外的参数定制吸气。

例如,请考虑以下方法在Java中:

public String getDisplayedValue(Context context) { 
    if (PrefUtils.useImperialUnits(context)) { 
     // return stuff 
    } else { 
     // return other stuff 
    } 
} 

注意,在PrefUtils静态方法必须具有Context作为参数,因此删除这是不是一种选择。

我想将它写像这样在科特林:

val displayedValue: String 
    get(context: Context) { 
     return if (PrefUtils.useImperialUnits(context)) { 
      // stuff 
     } else { 
      // other stuff 
     } 
    } 

但我的IDE亮点所有这一切都为红色。

我知道我可以在我的班级中创建一个函数来获取显示的值,但这意味着我将不得不在Kotlin中使用.getDisplayedValue(Context),而不能像在.displayedValue中那样按名称引用属性。

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

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

回答

3

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

+0

难道是不好的做法,通过'Context'到类的构造函数使用自定义的getter的参数? –

+0

这不是最简单的方法,但如果你需要一个属性的语法,那么做 – voddan

1

比如,你可以这样做:

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