@JvmOverloads这个注解是用来做什么的呢?
@JvmOverloads注解的作用:在有默认参数值的方法中使用,Kotlin会暴露多个重载方法。
在Kotlin中如下所写:
class TestView : View{
@JvmOverloads
constructor(context: Context,attributeSet: AttributeSet? = null,defStyleAttr: Int = 0): super(context,attributeSet,defStyleAttr){
}
}
在java中的表现如下:
public class TestView extends View {
public TestView(Context context) {
super(context);
}
public TestView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
使用了这个注解相当于声明了三个构造函数呢,是不是很方便?
再来一个栗子:
fun main(args: Array<String>) {
Demo.foo()
Demo.foo("a")
Demo.foo("aa",1)
Demo.foo("aaa",1,"cc")
}
class Demo{
companion object {
@JvmOverloads fun foo(a: String = "a",b: Int = 0,c: String = "c"){
println(a)
println(b)
println(c)
}
}
}