Java & Kotlin
Kotlin @JvmStatic
필자A
2022. 6. 27. 20:30
@JvmStatic
static 하게 운용하고 싶을 때 아래와 같이 작성하면 자바로는
baz클래스에 static한 값이 생기며 baz안의 Companio. class에 getter setter가 추가됩니다.
class baz {
companion object {
var s: Int = 0
}
}
... decompile
public final class baz {
private static int s;
public static final class Companion {
public final int getS() {
return baz.s;
}
public final void setS(int var1) {
baz.s = var1;
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
bazClass내에서 getter/setter가 생성되었습니다.
class baz {
companion object {
@JvmStatic var s: Int = 0
}
}
...decompile
public final class baz {
private static int s;
public static final int getS() {
Companion var10000 = Companion;
return s;
}
public static final void setS(int var0) {
Companion var10000 = Companion;
s = var0;
}
public static final class Companion {
/** @deprecated */
// $FF: synthetic method
@JvmStatic
public static void getS$annotations() {
}
public final int getS() {
return baz.s;
}
public final void setS(int var1) {
baz.s = var1;
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
이는 Java 확장자 파일에서 baz.s를 접근할 때 차이가 있습니다.
@JvmStatic이 없을시 baz내의 companion class(static)의 메서드를 통해 s에 접근이 가능합니다.
baz.companion.getS();
@JvmStatic이 있을경우
baz내에 getter/ setter가 존재해
baz.getS(); 같이 접근이 가능합니다.
반응형