Kotlin之注解-创新互联

注解是Java代码调用kotlin代码,kotlin对Java兼容提供的一种解决方案

创新互联建站秉承实现全网价值营销的理念,以专业定制企业官网,成都网站建设、成都网站制作,成都小程序开发,网页设计制作,成都做手机网站全网整合营销推广帮助传统企业实现“互联网+”转型升级专业定制企业官网,公司注重人才、技术和管理,汇聚了一批优秀的互联网技术人才,对客户都以感恩的心态奉献自己的专业和所长。常用注解
    • 1、 @JvmName
    • 2、@JvmField
    • 3、@JvmOverloads
    • 4、@JvmStatic
    • 5、@JvmMultifileClass
    • 6、@JvmSynthetic

1、 @JvmName

注解的作用就是更改kotlin源文件名称、方法名称

  1. 源文件名称修改
    假设有一个kotlin文件 KotlinAnnotationAnnotation.kt,文件中有一个方法 getKotlinFunShow()
fun getKotlinFunShow() {println("当前是kotlin文件中最外层的方法")
}

我们知道每一个 kotlin 源文件默认会编译出一个 java 类,类的命名默认是文件名+Kt

在Java中调用

KotlinAnnotationAnnotationKt.getKotlinFunShow();

虽然这也能调用,但是名字太长,我们就可以借助注解更改源文件名称
注意:需要写在package前面

@file:JvmName("KotlinTest")

package com.example....

再次调用

KotlinTest.getKotlinFunShow();
  1. 方法名称

普通方法更改

@JvmName("show")
fun getKotlinFunShow() {println("当前是kotlin文件中最外层的方法")
}

get/set方法名字更改

var name = _name
    @JvmName("setNameInfo")
    set

val age = _age
    @JvmName("getAgeInfo")
    get
2、@JvmField

注解的作用是让 var/val 属性不会再生成get/set方法,让Java代码可以直接方法属性

未注解时候访问

class KotlinNote(_name: String, _age: Int) {var name = _name
    val age = _age
}
KotlinNote kt = new KotlinNote("122", 12);
    kt.getName();
    kt.setName("java");
    kt.getAge();

注解后

class KotlinNote(_name: String, _age: Int) {@JvmField
    var name = _name
    @JvmField
    val age = _age
}
KotlinNote kt = new KotlinNote("122", 12);
String name = kt.name;
kt.name="java";
int age = kt.age;
3、@JvmOverloads

注解的作用就是用来解决Java中的方法是不支持默认参数问题

如下例子:kotlin主构造、方法存在默认参数

class KotlinPerson (val name: String, val age: Int = 8) {fun showInfo(name: String, age: Int = 8, sex: Char = '男') {println("name=$name,age=$age,sex=$sex")
    }
    
    fun toast(name: String, age: Int = 8, sex: Char = '男'){println("name=$name,age=$age,sex=$sex")
    }

}

//kotlin调用可以之传一个参数
val kotlinPerson=KotlinPerson("kotlin")
kotlinPerson.showInfo("kotlin")
kotlinPerson.toast("kotlin")
KotlinPerson kotlinPerson=new KotlinPerson("Java",44);
 kotlinPerson.showInfo("Java",44,'M');
 kotlinPerson.toast("Java",44,'M');

使用 @JvmOverloads 注解后
注意:主构造添加注解后 constructor 不能省略

class KotlinPerson @JvmOverloads constructor(val name: String, val age: Int = 8) {fun showInfo(name: String, age: Int = 8, sex: Char = '男') {println("name=$name,age=$age,sex=$sex")
    }
    
    @JvmOverloads
    fun toast(name: String, age: Int = 8, sex: Char = '男'){println("name=$name,age=$age,sex=$sex")
    }

}

构造方法、toast加了注解后就可以使用默认参数了

KotlinPerson kotlinPerson=new KotlinPerson("Java");
 kotlinPerson.showInfo("Java",44,'M');
 kotlinPerson.toast("Java");
4、@JvmStatic

注解作用就是让Java代码调用kotlin派生对象是可以直接访问

class KotlinCompanion {companion object {val PLACE = "世界之窗"

        fun whatToDo(name: String) {println("${name}计划明天去$PLACE")
        }
    }
}
KotlinCompanion.whatToDo("kotlin")

未加注解前Java调用需要.Companion

KotlinCompanion.Companion.whatToDo("Java");
class KotlinCompanion {companion object {@JvmStatic
        val PLACE = "世界之窗"
        
        @JvmStatic
        fun whatToDo(name: String) {println("${name}计划明天去$PLACE")
        }
    }
}

注解后,可以直接用

KotlinCompanion.whatToDo("Java");
5、@JvmMultifileClass

注解的作用:官方解释是多个kotlin文件使用JvmName进行更改一样的名字会有问题,需要加上这个关键字,但是经过我测试好像去掉也没报错。。。

有人知道的可以私信告诉我

@file:JvmName("KotlinUtil")
@file:JvmMultifileClass

package com.example.mykotlin2.note

class KotlinNote2 {}

fun functionA() {}
@file:JvmName("KotlinUtil")
@file:JvmMultifileClass

package com.example.mykotlin2.note

class KotlinNote3 {}

fun functionB(){}

在Java中调用,可以直接用KotlinUtil调用两个函数

KotlinUtil.functionA();
KotlinUtil.functionB();
6、@JvmSynthetic

注解的作用是让这个函数不让Java代码调用,加在函数上方

@JvmSynthetic
fun showInfo(name: String, age: Int = 8, sex: Char = '男') {println("name=$name,age=$age,sex=$sex")
}

注解后,Java中无法调用showInfo方法

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:Kotlin之注解-创新互联
网页网址:http://scyanting.com/article/dpopjd.html