我有一个类,它有一个long类型的字段,我想传递一个Int或Long值。
所以我想我可以用相同的名字做第二个setter,但是参数不同。Kotlin没有抱怨,我甚至可以从Java调用这两个setter(相同的名字,一个是从Kotlin用long自动创建的)。在Java中我只需要调用setMyNumber(long或int)value,编译器就会分配正确的方法。
但是为什么我不能在Kotlin中执行myNumber = 4
,为什么它不调用另一个setter?有没有别的方法可以实现这个功能,但是仍然保留属性符号(是的,我知道我可以写setter方法,但是我必须用方法调用来调用它们,而不是仅仅赋值)?
class MyClass {
var myNumber: Long = 0L // internal setMyNumber(value: Long)
fun setMyNumber(newNumber: Int) {
myNumber = newNumber.toLong()
}
}
1条答案
按热度按时间mwecs4sa1#
在编写本文时,您尝试执行的操作不受支持。(请参见:Allow setters overloading for properties)
解决方法是对表示数值的所有平台类使用超类:
在线试用!