@JvmName,@JvmField,@JvmOverloads, @JvmStatic -- java和kotlin混合开发时常用注解的使用

13 篇文章 0 订阅
7 篇文章 0 订阅
@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方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值