【Kotlin】Kotlin中的JVM兼容性注解

前言

Kotlin和Java可以混合使用,而且Kotlin对Java的兼容性几乎达到了100%

但是Kotlin和Java毕竟是两个语言,不可能完全实现无缝转换

JVM兼容性注解,就是为了解决编译时的语言差异问题

@JvmOverloads

Kotlin支持默认参数,但是Java不支持

加上@JvmOverloads后,编译器会自动生成多个同名的Java函数

kotlin 复制代码
@JvmOverloads
fun method(a: Int, b: Boolean = true, c: String = "c")
@JvmStatic

用在companion方法上面

Kotlin的静态方法,默认是生成在一个名为Companion的内部类中

加上@JvmStatic后,会在对应Java类中生成一个静态方法

这样在Java中其实可以有两种调用方式

kotlin 复制代码
companion object {
    @JvmStatic
    fun invokeStatic() {}
}
@JvmField

Kotlin默认会为变量生成get和set方法

在java中访问kotlin变量时,需要通过get和set方法来访问

加上@JvmField后,将不会自动生成生成get和set方法

主要用于需要自定义get和set方法的时候

kotlin 复制代码
@JvmField 
var id = 0
@JvmSynthetic

加上@JvmSynthetic后,对应方法将只能在Kotlin中使用

kotlin 复制代码
@JvmSynthetic
fun executeInKotlin() {}
@JvmInline

用在内联类中,内联类只允许一个参数

在编译成Java代码时,会将类替换为变量,来优化代码

内联函数在kotlin的不同版本关键字不一样,最新版本用的是value关键字

kotlin 复制代码
inline class Person(private val name: String = "")

@JvmInline
value class Person(private val name: String = "")
@JvmName @JvmMultifileClass

用在文件头部

Kotlin文件中是可以不包含类名的,编译成Java文件时会自动生成对应类文件

@JvmName用于指定生成的类名,如果Kotlin类文件已指定了类名,则会替换该类名

@JvmMultifileClass用于在类名重复时,合并类文件

相关推荐
大耳猫13 分钟前
Android 基于Camera2 API进行摄像机图像预览
android·kotlin·相机·camera
MYBOYER16 分钟前
Kotlin DSL Gradle 指南
android·开发语言·kotlin
zhangphil1 天前
Android叠加双RecyclerView ScaleGestureDetector AnimatorSet动态放大缩小,Kotlin(1)
android·kotlin
zhangphil2 天前
Android Glide load origin Bitmap, Kotlin
android·kotlin·glide
老码沉思录3 天前
Android开发实战班 - Android开发基础之 Kotlin语言基础与特性
android·微信·kotlin
闲暇部落4 天前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
长亭外的少年5 天前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
JIAY_WX5 天前
kotlin
开发语言·kotlin
麦田里的守望者江5 天前
KMP 中的 expect 和 actual 声明
android·ios·kotlin
菠菠萝宝5 天前
【YOLOv8】安卓端部署-1-项目介绍
android·java·c++·yolo·目标检测·目标跟踪·kotlin