Kotlin之注解-创新互联
注解是Java代码调用kotlin代码,kotlin对Java兼容提供的一种解决方案
创新互联建站秉承实现全网价值营销的理念,以专业定制企业官网,成都网站建设、成都网站制作,成都小程序开发,网页设计制作,成都做手机网站,全网整合营销推广帮助传统企业实现“互联网+”转型升级专业定制企业官网,公司注重人才、技术和管理,汇聚了一批优秀的互联网技术人才,对客户都以感恩的心态奉献自己的专业和所长。常用注解- 1、 @JvmName
- 2、@JvmField
- 3、@JvmOverloads
- 4、@JvmStatic
- 5、@JvmMultifileClass
- 6、@JvmSynthetic
注解的作用就是更改kotlin源文件名称、方法名称
- 源文件名称修改
假设有一个kotlin文件 KotlinAnnotationAnnotation.kt,文件中有一个方法 getKotlinFunShow()
fun getKotlinFunShow() {println("当前是kotlin文件中最外层的方法")
}
我们知道每一个 kotlin 源文件默认会编译出一个 java 类,类的命名默认是文件名+Kt
在Java中调用
KotlinAnnotationAnnotationKt.getKotlinFunShow();
虽然这也能调用,但是名字太长,我们就可以借助注解更改源文件名称
注意:需要写在package前面
@file:JvmName("KotlinTest")
package com.example....
再次调用
KotlinTest.getKotlinFunShow();
- 方法名称
普通方法更改
@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://pwwzsj.com/article/dpopjd.html