1. 程式人生 > >Kotlin中@JvmOverloads 註解

Kotlin中@JvmOverloads 註解

在Kotlin中@JvmOverloads註解的作用就是:
在有預設引數值的方法中使用@JvmOverloads註解,則Kotlin就會暴露多個過載方法。

可能還是雲裡霧裡,直接上程式碼,程式碼解釋一切:
如果我們再kotlin中寫如下程式碼:

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

相當於在Java中宣告

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

預設引數沒有起到任何作用。

但是如果使用的了@JvmOverloads註解:

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

相當於在Java中聲明瞭3個方法:

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

是不是很方便,再也不用寫那麼多過載方法了。

注:該註解也可用在構造方法和靜態方法。

class MyLayout: RelativeLayout {

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

相當Java中的:

public class MyLayout extends RelativeLayout {

    public MyLayout(Context context) {
        this(context, null);
    }

    public MyLayout(Context context, AttributeSet attrs) {
        this(context, attrs,
0); } public MyLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } }

作者:ericZhong
連結:https://www.jianshu.com/p/72d1959a7c56
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。