class TestJvmStatic {
companion object {
const val a = 1
val b = 2
var c = 3
@JvmField
var d = 4
@JvmField
val e = 5
@JvmStatic
fun doOperateA() {
}
fun doOperateB() {}
}
}
轉換成Java代碼如下:
public final class TestJvmStatic {
public static final int a = 1;
private static final int b = 2;
private static int c = 3;
@JvmField
public static int d = 4;
@JvmField
public static final int e = 5;
public static final TestJvmStatic.Companion Companion = new TestJvmStatic.Companion((DefaultConstructorMarker)null);
@JvmStatic
public static final void doOperateA() {
Companion.doOperateA();
}
public static final class Companion {
public final int getB() {
return TestJvmStatic.b;
}
public final int getC() {
return TestJvmStatic.c;
}
public final void setC(int var1) {
TestJvmStatic.c = var1;
}
@JvmStatic
public final void doOperateA() {
}
public final void doOperateB() {
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
在Java檔案中呼叫:
TestJvmStatic.doOperateA();
TestJvmStatic.Companion.doOperateB();
int a = TestJvmStatic.a;
int e = TestJvmStatic.e;
int d = TestJvmStatic.d;
TestJvmStatic.Companion.getB();
TestJvmStatic.Companion.getC();
通過對比可以發現:@JvmStatic 和 @JvmField 注解,才能使方法或者欄位暴露為靜態方法或靜態欄位,這樣Java呼叫方式和正常的Java靜態方法的呼叫方式一樣了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/181352.html
標籤:其他
