Kotlin-28-JvmName注解(消灭Kt)

目录

1、Java调用Kotlin代码

2、JvmName注解

3、JvmMultifileClass注解


 

1、Java调用Kotlin代码

我们都知道,如果Java调用Kotlin文件中的代码,需要通过 TestA+kt的形式来调用,那么我们如何在不创建一个Kotlin的class的情况下,实现用 TestA.testName()呢?

那就是 @file:JvmName("TestAA") 注解。

//TestA.kt 中的代码
fun testName() {
    println("测试一下class名称")
}

//TestB.java 中的代码
public class TestB {
    public static void main(String[] args) {
        TestAKt.testName();
    }
}

2、JvmName注解

看下面代码使用 @file:JvmName("TestAA") 注解之后,就可以实现用 注解的名字 直接调用函数:TestAA.testName();

注意:@file:JvmName("TestAA")必须写在包名的前面,否则无法起作用

下面有TestA.kt编译后的源码,可以看出,在编译后,会在TestA.kt中生成和注解名称一样的class类。这就是实现用类名直接调用Kotlin文件中方法的一种方式。

//TestA.kt 中的代码
@file:JvmName("TestAA")

package com.yobo.yobo_kotlin.test29_jvmName
fun testName() {
    println("测试一下class名称")
}

//TestB.java 中的代码
public class TestB {
    public static void main(String[] args) {
        TestAA.testName();
    }
}


//TestA.kt 编译后的代码
@JvmName(
   name = "TestAA"
)
public final class TestAA {
   public static final void testName() {
      String var0 = "测试一下class名称";
      boolean var1 = false;
      System.out.println(var0);
   }
}

3、JvmMultifileClass注解

如果我们在同一包名下面的两个kt文件中,用@file:JvmName("TestAA") 注解了一样的class名字,会发生什么呢?那就会报错。

                          

怎么解决呢?用 @file:JvmMultifileClass注解可以解决类名相同的问题。

TestA.kt 和 TestC.kt都使用这个注解之后,在文件编译后,会将两个文件的中的方法强制合并到一个class类中,这就是这个注解的原理。

//TestA.kt 中的代码
@file:JvmName("TestAA")
@file:JvmMultifileClass
package com.yobo.yobo_kotlin.test29_jvmName
fun testName() {
    println("测试一下class名称")
}

//TestC.kt 中的代码
@file:JvmName("TestAA")
@file:JvmMultifileClass
package com.yobo.yobo_kotlin.test29_jvmName
fun testName1() {
    println("测试一下class名称1")
}

//TestB.java 中的代码
public class TestB {
    public static void main(String[] args) {
        TestAA.testName();
        TestAA.testName1();
    }
}

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值