Kotlin系列之注解详解

目录

注解:@file:JvmName

注解:@JvmField

注解:@JvmOverloads

注解:@JvmStatic

注解:@JvmMultifileClass

注解:@JvmSynthetic


注解:@file:JvmName

@file:JvmName(“XXX”) 放在类的最顶层,给当前类换一个名字,jvm在编译时会替换

@JvmName("XXX") 可以替换方法的名字

Kt文件

Kotlin系列之注解详解_第1张图片

java文件

Kotlin系列之注解详解_第2张图片

code:KT

@file:JvmName("Stu")

package com.example.lib

var name = null

@JvmName("sn")
inline fun showName() {
    println(name)
}

java

package com.example.lib;

public class MyCla {
    public static void main(String[] args) {
        //没有添加@file:JvmName("Stu") 之前调用
        //OutAKt.showName();
        //没有添加@JvmName("sn")之前调用 showName()方法
        //Stu.showName();
        //添加类 注释 @file:JvmName("Stu") 和 方法注释@JvmName("sn")后
        Stu.sn();
    }
}

注解:@JvmField

@JvmField 给成员添加该标签,剔除私有代码,之后就可以直接调用了。

使Kotlin编译器不再对该字段生成getter/setter并将其作为公开字段

code:KT

class Peop3{
    //@JvmField
    val  name = listOf("张三","李四","王五")
}

java

Peop3 person = new Peop3();
//添加@JvmFiled前,只能调用类中的get/set方法,不能直接调用属性
for (String name : person.getName()) {
    System.out.println(name);
}

添加注解后

code:KT

class Peop3{
    @JvmField
    val  name = listOf("张三","李四","王五")
}

java

Peop3 person = new Peop3();
        //添加@JvmFiled前,只能调用类中的get/set方法,不能直接调用属性
//        for (String name : person.getName()) {
//            System.out.println(name);
//        }
        //添加@JvmFiled后,可以直接调用类对应属性
        for (String name : person.name) {
            System.out.println(name);
        }

注解:@JvmOverloads

@JvmOverLoads KT的方法中有默认参数的,java无法享用,给方法添加该标签之后就可以了,
编译器会帮你重载一个对应的方法给你调用,之后再方法里面再调用原来的方法。

Kotlin系列之注解详解_第3张图片

但java不能直接调用缺省参数,报错

Kotlin系列之注解详解_第4张图片

添加注解后编译通过

Kotlin系列之注解详解_第5张图片

Kotlin系列之注解详解_第6张图片

注解:@JvmStatic

@JvmStatic 给对象的成员添加属性变成静态可以直接调用,在KT的半生类companion中,实际生成的是一个静态内部类,你如果给一个方法添加该标签,实际上外面会生成一个静态方法,但是最终方法里面还是会调用回companion里面,JVM没那么傻生成两个方法

未添加注解前

Kotlin系列之注解详解_第7张图片

Kotlin系列之注解详解_第8张图片

添加注解后

Kotlin系列之注解详解_第9张图片

Kotlin系列之注解详解_第10张图片

注解:@JvmMultifileClass

这个注解让Kotlin编译器生成一个多文件类,该文件具有在此文件中声明的顶级函数和属性作为其中的一部分,JvmName注解提供了相应的多文件的名称。
使用场景:
        我们可以看到使用注解以后将A和B文件中的方法合在了一个Utils类中,这个注解可以消除我们去手动创建一个Utils类,向Utils类中添加方法更加灵活和方便

Kotlin系列之注解详解_第11张图片

Kotlin系列之注解详解_第12张图片

Kotlin系列之注解详解_第13张图片

注解:@JvmSynthetic

如果你写的⼀个函数你只想给kotlin代码调⽤ ⽽不想给java的代码调⽤ 那你就在你的函数上⾯加上这个注解即可 

你可能感兴趣的:(Kotlin,kotlin,java,开发语言)