美文网首页
Kotlin 注解2

Kotlin 注解2

作者: Wavky | 来源:发表于2018-07-20 19:24 被阅读0次

    @JvmStatic

    被标记的函数、变量将编译为Java中的类静态成员变量,不需要通过伴随对象Companion引用:

    class C {
        companion object {
            @JvmStatic fun foo() {}
            fun bar() {}
        }
    }
    // In Java:
    C.foo(); // works fine
    C.bar(); // error: not a static method
    C.Companion.foo(); // instance method remains
    C.Companion.bar(); // the only way it works
    
    
    object Obj {
        @JvmStatic fun foo() {}
        fun bar() {}
    }
    // In Java:
    Obj.foo(); // works fine
    Obj.bar(); // error
    Obj.INSTANCE.bar(); // works, a call through the singleton instance
    Obj.INSTANCE.foo(); // works too
    

    @Synchronized

    和Java中给类加上Synchronized修饰符一样,实现线程安全。

    @Volatile

    和Java的Volatile修饰符作用一样。

    @JvmOverloads

    Kotlin中@JvmOverloads 注解

    在有默认参数值的方法中使用@JvmOverloads注解,则Kotlin就会暴露多个重载方法。

    由于默认参数值在Java调用中不起作用:

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

    ※ 尤其在重写View的时候,需要声明为

    class xxx @JvmOverloads constructor()
    

    相关文章

      网友评论

          本文标题:Kotlin 注解2

          本文链接:https://www.haomeiwen.com/subject/kagqmftx.html