1 @JvmOverloads
为了解决java不能重载kotlin有默认参数的方法
![](https://img.haomeiwen.com/i4471798/9538172239cd60c0.png)
![](https://img.haomeiwen.com/i4471798/a2d1cb2b572c0d5c.png)
所以需要在kotlin方法上添加@JvmOverloads,加上后就是正常的了
![](https://img.haomeiwen.com/i4471798/c1d5a2a0231b55b3.png)
2 @JvmStatic、@JvmField
为了解决在java中不能直接调用kotlin中的静态方法和静态变量
![](https://img.haomeiwen.com/i4471798/aa2cfa89d0472e95.png)
![](https://img.haomeiwen.com/i4471798/b743fe17ad561f0a.png)
如果需要在JAVA中也直接类名.调用静态方法和变量的话需要加上注解
![](https://img.haomeiwen.com/i4471798/f94a615f371cea3a.png)
![](https://img.haomeiwen.com/i4471798/da18537df0a10657.png)
3 @JvmName
这个注解可以改变字节码中生成的类名或方法名称,如果作用在顶级作用域(文件中),则会改变生成对应java类的名称,如果作用在方法上,则会改变生成对应JAVA方法的名称。
![](https://img.haomeiwen.com/i4471798/3ca78776261e9172.png)
可以看到第一个注解@file:JvmName("TanTestKt")的作用是使生成的类名变为TanTestKt
第二个注解的作用是使生成的方法名称变为TanMain
网友评论