Kotlin的@JvmOverloads的小技巧

@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)
      }

   }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容