在类中使用

  1. class Test @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr) {
  2. }

class Test: View {

   @JvmOverloads
   constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : super(context, attrs, defStyleAttr)
}

以上两段代码功能一样,均使用 @JvmOverloads 来标记继承类的构造方法,因为括号内有三个参数,其中后两个都设置了默认值,所以它会产生以下三个构造函数:

Test(context: Context)
Test(context: Context, attrs: AttributeSet)
Test(context: Context, attrs: AttributeSet, defStyleAttr: Int)

其中后两个参数如果没有传入的话将会使用默认值。

在方法中使用

@JvmOverloads fun f(a: String, b: Int=0, c:String="abc"){
}

这里在方法前边标记了 @JvmOverloads ,这相当于声明了三个方法,分别是:

void f(String a)
void f(String a, int b)
void f(String a, int b, String c)