不同类型的属性设置器
考虑下面的例子,有可能有一个接受一个Int
另一个接受Double
x
的setter?
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) vx = 11 // error: 'The integer literal does not conform to the expected type Float' vx = 11.0 // error: 'The floating-point literal does not conform to the expected type Float' vx = 11f // ok
虽然你不能重载setter,你可以利用Number
接口,只需接受所有数字并将它们转换为float:
class Test(x: Float) { var x: Number = x get() { return field } set(value) { // 'value' is of type 'Number' field = value.toFloat() } }
这意味着不仅可以接受Float
, Int
和Double
,还可以接受Byte
, Short
, BigInteger
, BigDecimal
, AtomicInteger
, AtomicLong
, AtomicDouble
和实现Number
任何其他类。
关于什么:
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() } }