Kotlin注解之JvmName

我们首先定义给 Int定义一个扩展函数。

fun Int.compare(num: Int): Int {
    return if (this > num) {
        this
    } else num
}

在Kotlin代码中我们可以直接调用:

println(2.compare(1))

但是在 Java代码中我们的调用方式变为:

public static void main(String[] args) {
    int num = TestAnotionKt.compare(2, 1);
    System.out.println(num);
}

其实通过观察Kotlin转换为Java的代码就可以比较容易理解Java中的调用方式了,可以发现扩展被转换成了一个静态方法。类名变为:Koltin文件名+Kt

public final class TestAnotionKt {
   public static final int compare(int $this$compare, int num) {
      return $this$compare > num ? $this$compare : num;
   }
}

其实上述的方法类似于一个工具类:这个时候我们就可以使用JvmName注解来给Java的调用方式重新取一个名字。

@file:JvmName("IntUtils")

package com.example.annotation


fun Int.compare(num: Int): Int {
    return if (this > num) {
        this
    } else num
}

则在Java中可以进行如下调用:

int num = IntUtils.compare(1, 2);
System.out.println(num);

通过将Kotlin代码转换成 Java代码,可以看出JvmName注解的作用:可以修改静态方法所在的类名。

public final class IntUtils {
   public static final int compare(int $this$compare, int num) {
      return $this$compare > num ? $this$compare : num;
   }
}

猜你喜欢

转载自blog.csdn.net/zhangying1994/article/details/109136359