美文网首页
Kotlin常用注解参数解析

Kotlin常用注解参数解析

作者: mianbaocheng | 来源:发表于2020-07-07 17:38 被阅读0次
    • JvmField (用来修饰属性)
      使用jvmField注解,使得Kotlin编译器不再对属性字段生成getter/setter
    class JvmFieldBean{
        var name:String?=null
        @JvmField var age:Int? =null
    }
    
    class Test{
        public static void main(String[] args){
            JvmFieldBean bean = new JvmFieldBean();
            bean.setName("aaaa");//访问属性只能通过setter和getter方法
            bean.age = 20;//age可见性为public同时没有生成setter和getter方法
        }
    }
     
    

    故对应的java代码为:

    class JvmFieldBean{
        private String name;
        public int age;
        
        public void setName(String name){
            this.name = name;
        }
    
        public String getName(){
          return name;
        }
    }
    
    • JvmName
      使用JvmName来告诉编译器生成的java类或者方法的名称
    @file:JvmName("JvmNameTest")
    
    package com.today07
    
    var name: String? = null
        @JvmName("setUserName")
        set(value) {
            field = value
        }
    
    @JvmName("getInfos")
    fun getInfo() {
    
    }
    
    class Test{
        public static void main(String[] args){
            JvmNameTest.setUserName("aaaa");//设置name属性值只能通过setUserName方法
            JvmNameTest.getName();//获得该属性的值
            JvmNameTest.getInfos();//调用发现没有getInfo的方法
        }
    }
    

    故对应的java代码为:

    class JvmNameTest{
        private static String name;
    
        public static void setUserName(String name){
            this.name = name;
        }
    
        public static String getName(){
            return name;
        }
    
        public static void getInfos(){}
    }
    
    • JvmMultifileClass
      该注解指示编译器生成一个多文件类,其中包含在此文件中声明的顶级功能和属性作为其一部分,相应的多文件类名称由JvmName指定
    @file:JvmName("Utils")
    @file:JvmMultifileClass
    
    package com.today07
    
     var fieldA: String? = null
    fun getA(): String {
        return "this is A"
    }
    
    @file:JvmName("Utils")
    @file:JvmMultifileClass
    
    package com.today07
    
    fun getB(): String {
        return "this is B"
    }
    
    class Test{
        public static void main(String[] args){
            Utils.getFieldA();
            Utils.getA();
            Utils.getB();
        }
    }
    

    故对应的java代码为:

    class Utils{
        private static String fieldA;
      
        public static String getFieldA(){
            return fieldA
        }
    
        public static void setFieldA(String fieldA){
            this.fieldA = fieldA;
        }
    
        public static void getA(){}
    
        public static void getB(){}
    }
    
    • JvmOverloads
      告诉Kotlin编辑器为此函数生成替换参数值的重载
      @file:JvmName("JvmOverloadTest")
    package com.today07
    
    @JvmOverloads
    fun getInfo(name: String, age: Int = 10):String{
        return "name:$name age:$age"
    }
    
    class Test{
        public static void main(String[] args){
            JvmOverloadTest.getInfo("aaaa");
            JvmOverloadTest.getInfo("bbbb",20);
        }
    }
    

    故对应的java代码为:

    class JvmOverloadTest{
          public static String getInfo(String name){
              this(name,10)
          }
          
          public static String getInfo(String name,int age){
                return "name:$name age:$age"
          }
    }
    
    • JvmStatic
      该注解只能在object或者Companion object中使用
      对于函数使用该注解,Kotlin编译器将生成另一个静态方法
      对于属性使用该注解,Kotlin编辑将生成其他的setter和getter方法
      这个注解的作用其实就是消除java调用Kotlin的companion object对象时不能直接调用其静态方法和属性的问题。
    package com.today07
    
    object ObjectTest {
        val name:String? =null
        @JvmStatic
        var age:String? =null
        @JvmField
        var sex:Boolean? =null
        fun getTest(){}
    
        @JvmStatic
        fun getTestB(){
    
        }
    }
    
    class Test{
        public static void main(String[] args){
            ObjectTest.INSTANCE.getTest();
            ObjectTest.getTestB();
            ObjectTest.INSTANCE.getName();
            ObjectTest.getAge();
            ObjectTest.sex = false;
        }
    }
    

    相关文章

      网友评论

          本文标题:Kotlin常用注解参数解析

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