2017-03-05 2 views
1

xを受け入れ、Intを受け入れるセッターとDoubleを受け入れるセッターを持つことは可能ですか?異なるタイプのプロパティーセッター

class Test(x: Float) { 

    var x: Float = x 
     get() { 
      return field 
     } 
     set(value) { // 'value' is of type 'Float' 
      field = value 
     } 

} 

理由:私はxに新しい値を代入したい場合は、私は常にすべての割り当てにf接尾を追加する必要があり、すなわち

var v = Test(12f) 
v.x = 11 // error: 'The integer literal does not conform to the expected type Float' 
v.x = 11.0 // error: 'The floating-point literal does not conform to the expected type Float' 
v.x = 11f // ok 
+0

これは、プロパティが浮動小数点でなければならないことを呼び出し元が認識していないため、バグが発生しないようにするのに適しています。 floatの代わりにdoubleを使用する以外は、コードに何も変更しないでください。 –

答えて

-1

何について:

class Test(x: Float) { 
    var x: Float = x 
     get() { 
      return field 
     } 
     set(value) { // 'value' is of type 'Float' 
      field = value 
     } 

    fun setX(value: Int) { 
     x = value.toFloat() 
    } 
} 
1

が、あなたはNumberインターフェイスを利用することができ、すべての数値を受け入れて浮動小数点数に変換することができます:

class Test(x: Float) { 
    var x: Number = x 
     get() { 
      return field 
     } 
     set(value) { // 'value' is of type 'Number' 
      field = value.toFloat() 
     } 
} 

これはFloatInt、およびDoubleが受け入れられないだけということもByteShortBigIntegerBigDecimalAtomicIntegerAtomicLongAtomicDouble、およびNumberを実装して他のクラス。

関連する問題