接口中无法使用@JvmOverloads注解如何解决呢?


#1

我在接口中创建了一个具有默认函数的方法,这个方法是带有默认参数的,比如下面这样:

    fun setInfo(id:Int = -1,name:String = "")

子类继承了该接口后重写了setInfo()函数,现在问题来了,接口中是不能使用@JvmOverloads注解的,子类重写的方法虽然可以使用@JvmOverloads,但是不能给参数赋默认值,这就导致了在Java中调用时无法重载函数。比如我在Java中调用到setInfo()时,必须要传入id和name参数,无法像在Kotlin中那样使用默认值。请问这种情况有什么好的写法吗?


#2

有个方法是不用 interface,改用 abstract class,在某些情况下,这两者也没有太大差别

abstract class Super {
    @JvmOverloads
    open fun setInfo(id:Int = -1, name:String = "") { }
}

当然,如果在你的场景里面一定要用 interface 的话,我能想到的就是手动把那些重载都写出来了…


#3

谢谢解答,我的子类已经继承了其他父类,只能接口了。


京ICP备16022265号-2 Kotlin China 2017 - 2018