同伴類本身沒有參考實際的類,你可以在這個字節碼看
public final class TestClass$Companion {
private TestClass$Companion() { // <init> //()V
<localVar:index=0 , name=this , desc=LTestClass$Companion;, sig=null, start=L1, end=L2>
L1 {
aload0 // reference to self
invokespecial java/lang/Object <init>(()V);
return
}
L2 {
}
}
public TestClass$Companion(kotlin.jvm.internal.DefaultConstructorMarker arg0) { // <init> //(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
<localVar:index=0 , name=this , desc=LTestClass$Companion;, sig=null, start=L1, end=L2>
<localVar:index=1 , name=$constructor_marker , desc=Lkotlin/jvm/internal/DefaultConstructorMarker;, sig=null, start=L1, end=L2>
L1 {
aload0 // reference to self
invokespecial TestClass$Companion <init>(()V);
return
}
L2 {
}
}
}
參考僅僅是周圍的其他方式(參見反編譯科特林級)
public final class TestClass {
public static final Companion companion = ...
}
所以你可以像剛纔那樣通過切斷類名的.Companion
部分來做到這一點,或者你可以用TestClass::class.java
(我認爲沒有問題和最好的解決方案)很難引用它
爲什麼'javaClass'不存在? – miensol
那麼'val clazz = TestClass :: class.java'呢? – marstran
啊,我的不好,澄清了這個問題 - 我想在編譯時不知道名稱的情況下上課。 – shutefan