在Kotlin中@JvmOverloads
注解的作用:
在有默认参数值的方法中使用 @JvmOverloads
注解,则Kotlin就会暴露多个重载方法
如果在Kotlin中定义了如下方法
fun method(String, b: Int = 0, c: String="abc"){
...
}
只是相当于在java中定义如下方法,是的默认参数无任何的意义
void method(String a, int b, String c){
...
}
但如果使用的了@JvmOverloads
注解在 method 方法前,就相当于定义如下三个java方法,而再也不用自己写重载方法
void method(String a)
void method(String a, int b)
void method(String a, int b, String c)
@JvmOverloads
注解可以用在 方法,构造函数,静态方法中。
在构造函数的使用情况下,Android领域用的较多的场景就是自定义View的实现
class CollapsibleToolbar @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0)
: MotionLayout(context, attrs, defStyleAttr)
�在Kotlin中定义类的继承时,Android Studio工具会提醒使用 @JvmOverloads 注解,并且帮助生成上述格式代码
class CollapsibleToolbar : MotionLayout
对应生成的java构造函数如下:
public class CollapsibleToolbar extends MotionLayout {
public CollapsibleToolbar(Context context) {
this(context, null);
}
public CollapsibleToolbar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CollapsibleToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}