2016-07-31 4 views
1

私はカスタムgetterとsetterを含め、Kotlinのpropertiesについて読んでいます。kotlinのカスタムゲッターにパラメータを渡す

しかし、余分なパラメータでカスタムゲッターを作成できるかどうかは疑問でした。

は例えば、Javaで次のような方法を考えてみます。PrefUtilsでの静的メソッドは、パラメータとしてContextを持つ必要が

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

注ことなので、これはオプションではありません取り除きます。

私はKotlinでこのようにそれを書きたいと思います:

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

しかし、私のIDEは赤で、このすべてを強調しています。

表示された値を取得するためにクラスに関数を作成することができますが、.displayedValueのようにプロパティを参照する代わりに.getDisplayedValue(Context)をKotlinでも使用する必要があることを意味します。

このようなカスタムゲッターを作成する方法はありますか?

EDIT:そうでない場合、このための関数を書くか、Contextをクラスコンストラクタのパラメータに渡すのが最善でしょうか?

答えて

3

私が知る限り、プロパティゲッターはパラメータを持つことができません。代わりに関数を記述してください。

+0

が、それは悪い習慣がカスタムゲッターに使用するクラスのコンストラクタのパラメータに 'Context'を渡すだろうか? –

+0

これは最も簡単な方法ではありませんが、プロパティの構文が必要な場合は、それを行います – voddan

1

あなたは、たとえば行うことができます。

val displayedValue: String by lazy { 
    val newString = context.getString(R.string.someString) 
    newString 
} 
関連する問題