不同类型的属性设置器

考虑下面的例子,有可能有一个接受一个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() } } 

这意味着不仅可以接受FloatIntDouble ,还可以接受ByteShortBigIntegerBigDecimalAtomicIntegerAtomicLongAtomicDouble和实现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() } }