考虑以下示例,是否可以为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 :(得分:1)
虽然你不能重置setter,你可以利用Number
接口,只需接受所有数字并将它们转换为浮点数:
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
,{{ 1}},BigDecimal
,AtomicInteger
,AtomicLong
以及任何其他实现AtomicDouble
的类。
答案 1 :(得分:-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()
}
}