@file:JvmName("Test") 必须写在文件首行之上
Test.kt 编译后生成 TestKt -- java 端 调用 TestKt.test()
JvmName 编译后生成 Test -- java 端 调用 Test.test()
@JvmField -- 消除kotlin的默认私有访问权限,使Java端可以以public调用
var name = "Allen" -- private String name = "Allen" new Person().getName() ,伴生可直接
@JvmField
var name = "Allen" -- public String name = "Allen" new Person().name
@JvmOverloads
fun method(name : String, age : Int = 18){
println("我的名字是: ${name},我今年 $age 岁了")
}
kotlin 端 只传 name一个参数即可 , java 有缺省值的 情况下 也要传递 全参
加上 @JvmOverloads 强制 重载 就可以传递 任意参数 1 or 2
@JvmStatic
class Person_Test{
companion object{
fun showMethod(name : String){
println("${name} 今年18岁了")
}
}
}
KT Person_Test.showMethod("Allen")
java Person_Test.Companion.showMethod("Allen");
companion object 反编译后其实又生成了一个Companion类 ,showMethod被封装在了里面 所以 Person_Test.Companion.showMethod
@JvmStatic -- 类中 封装了一个static 的showMethod ,然后也是调用了Companion里面的showMethod方法 -- Person_Test.showMethod("Allen")
总结:
1.@JvmName:便于去修改kt文件背后生成的类名,必须写在包名上面
2.@JvmField: 消除kotlin的默认私有访问权限,无需 get
3.@JvmOverloads: 生成重载方法,便于Java在调用有 默认值 参数的函数的时候 可以仅传入无默认值的那些参数
4.@JvmStatic:使Java在调用派生类Companion Object的函数使能够像调用static方法一样,直接xx类 . xx方法
@JvmName,@JvmField,@JvmOverloads, @JvmStatic -- java和kotlin混合开发时常用注解的使用
于 2024-07-09 17:10:43 首次发布