companion object和object 从kotlin转java分析
说明
companion object 中
companion类中的方法是普通的方法
在外部类中生成静态变量,静态companion 对象
object MyClass2 中
类中方法是普通方法
在MyClass2中生成静态变量,静态MyClass2对象,
一 companion object 使用 kotlin转java
package test.e
class Test1 {
}
fun main() {
// MyClass.MyClass2.printHello()
MyClass.printHello()
}
class MyClass {
var a =10
companion object {
var b =1
// @JvmStatic
fun printHello() {
println("Hello, World!")
}
}
}
调用方法
//MyClass.printHello()
------------------------------------------
// Test1.java
package test.e;
import kotlin.Metadata;
@Metadata(
mv = {2, 0, 0},
k = 1,
xi = 48,
d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0003"},
d2 = {"Ltest/e/Test1;", "", "()V", "untitled"}
)
public final class Test1 {
}
// MyClass.java
package test.e;
import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;
import org.jetbrains.annotations.NotNull;
@Metadata(
mv = {2, 0, 0},
k = 1,
xi = 48,
d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0006\u0018\u0000 \t2\u00020\u0001:\u0001\tB\u0005¢\u0006\u0002\u0010\u0002R\u001a\u0010\u0003\u001a\u00020\u0004X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0005\u0010\u0006\"\u0004\b\u0007\u0010\b¨\u0006\n"},
d2 = {"Ltest/e/MyClass;", "", "()V", "a", "", "getA", "()I", "setA", "(I)V", "Companion", "untitled"}
)
public final class MyClass {
@NotNull
**public static final Companion Companion = new Companion((DefaultConstructorMarker)null);**
private int a = 10;
private static int b = 1;
public final int getA() {
return this.a;
}
public final void setA(int var1) {
this.a = var1;
}
@Metadata(
mv = {2, 0, 0},
k = 1,
xi = 48,
d1 = {"\u0000\u001a\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0005\n\u0002\u0010\u0002\n\u0000\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u0006\u0010\t\u001a\u00020\nR\u001a\u0010\u0003\u001a\u00020\u0004X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0005\u0010\u0006\"\u0004\b\u0007\u0010\b¨\u0006\u000b"},
d2 = {"Ltest/e/MyClass$Companion;", "", "()V", "b", "", "getB", "()I", "setB", "(I)V", "printHello", "", "untitled"}
)
public static final class Companion {
private Companion() {
}
public final int getB() {
return MyClass.b;
}
public final void setB(int var1) {
MyClass.b = var1;
}
public final void printHello() {
String var1 = "Hello, World!";
System.out.println(var1);
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
// Test1Kt.java
package test.e;
import kotlin.Metadata;
@Metadata(
mv = {2, 0, 0},
k = 2,
xi = 48,
d1 = {"\u0000\b\n\u0000\n\u0002\u0010\u0002\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002"},
d2 = {"main", "", "untitled"}
)
public final class Test1Kt {
public static final void main() {
MyClass.Companion.printHello();
}
// $FF: synthetic method
public static void main(String[] args) {
main();
}
}
二 object kotlin转java
package test.e
class Test1 {
}
fun main() {
MyClass.MyClass2.printHello()
// MyClass.printHello()
}
class MyClass {
var a =10
object MyClass2 {
var b =1
// @JvmStatic
fun printHello() {
println("Hello, World!")
}
}
}
调用方法
//MyClass.printHello()
------------------------------
// Test1.java
package test.e;
import kotlin.Metadata;
@Metadata(
mv = {2, 0, 0},
k = 1,
xi = 48,
d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0003"},
d2 = {"Ltest/e/Test1;", "", "()V", "untitled"}
)
public final class Test1 {
}
// MyClass.java
package test.e;
import kotlin.Metadata;
import org.jetbrains.annotations.NotNull;
@Metadata(
mv = {2, 0, 0},
k = 1,
xi = 48,
d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0006\u0018\u00002\u00020\u0001:\u0001\tB\u0005¢\u0006\u0002\u0010\u0002R\u001a\u0010\u0003\u001a\u00020\u0004X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0005\u0010\u0006\"\u0004\b\u0007\u0010\b¨\u0006\n"},
d2 = {"Ltest/e/MyClass;", "", "()V", "a", "", "getA", "()I", "setA", "(I)V", "MyClass2", "untitled"}
)
public final class MyClass {
private int a = 10;
public final int getA() {
return this.a;
}
public final void setA(int var1) {
this.a = var1;
}
@Metadata(
mv = {2, 0, 0},
k = 1,
xi = 48,
d1 = {"\u0000\u001a\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0005\n\u0002\u0010\u0002\n\u0000\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u0006\u0010\t\u001a\u00020\nR\u001a\u0010\u0003\u001a\u00020\u0004X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0005\u0010\u0006\"\u0004\b\u0007\u0010\b¨\u0006\u000b"},
d2 = {"Ltest/e/MyClass$MyClass2;", "", "()V", "b", "", "getB", "()I", "setB", "(I)V", "printHello", "", "untitled"}
)
public static final class MyClass2 {
@NotNull
**public static final MyClass2 INSTANCE = new MyClass2();**
private static int b = 1;
private MyClass2() {
}
public final int getB() {
return b;
}
public final void setB(int var1) {
b = var1;
}
public final void printHello() {
String var1 = "Hello, World!";
System.out.println(var1);
}
}
}
// Test1Kt.java
package test.e;
import kotlin.Metadata;
@Metadata(
mv = {2, 0, 0},
k = 2,
xi = 48,
d1 = {"\u0000\b\n\u0000\n\u0002\u0010\u0002\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002"},
d2 = {"main", "", "untitled"}
)
public final class Test1Kt {
public static final void main() {
MyClass.MyClass2.INSTANCE.printHello();
}
// $FF: synthetic method
public static void main(String[] args) {
main();
}
}