2017-10-23 3 views
1

私はKotlinを初めて使っているので、非常に基本的な問題の周りに私の頭を包むことはできません:有効性のパラメータをチェックしてカスタムセッタを取得するにはどうすればよいですか?

私はカスタムセッターを持って、

マイコード:

class Test { 
    var presni: Int = 1 
     set(value) { 
      if (value < 0) { 
       throw IllegalArgumentException("Negative value"); 
      } 

      presni = value 
     } 
} 

が、それは私がpresni = valueラインで警告を与える:再帰的プロパティアクセサ

妥当性についてセッターのパラメータをチェックするためのKotlinにおけるイディオムとは何ですか?

答えて

5

Kotlinが提供する自動backing fieldを使用する必要があります。 fieldという識別子を使用してアクセスできます。あなたも拒否可能委任を使用することができますバッキングフィールドでそれを保存する前に値を検証するために

class Test { 
    var presni: Int = 1 
     set(value) { 
      if (value < 0) { 
       throw IllegalArgumentException("Negative value"); 
      } 

      // Assign the value to the backing field. 
      field = value 
     } 
} 
5

これは一例です:

var presni: Int by Delegates.vetoable(1,{ _, _, newValue -> 
     newValue >= 0 
    }) 

公式ドキュメントは言う:

コールバックがtrueを返す場合、プロパティの値が新しい値に を設定し、コールバックされている場合falseを返します。新しい値は で、そのプロパティは古い値のままです。

関連する問題