我们首先定义给 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;
}
}