kotlin 具有不同参数类型的类字段(setter重载)

ldioqlga  于 2023-02-19  发布在  Kotlin
关注(0)|答案(1)|浏览(99)

我有一个类,它有一个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()
    }

}
mwecs4sa

mwecs4sa1#

在编写本文时,您尝试执行的操作不受支持。(请参见:Allow setters overloading for properties
解决方法是对表示数值的所有平台类使用超类:

class MyClass {
    var myNumber: Number = 0L
        set (value) { field = value.toLong() }
}

val myClass = MyClass()

val anInt: Int = 1
val aLong: Long = 1L

myClass.myNumber = anInt
myClass.myNumber = aLong

在线试用!

相关问题