あなたはこのバイトコードに
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 {
}
}
}
を見ることができるようにコンパニオンクラス自体が、基準が周りの唯一の他の方法である実際のクラスへの参照を持っていません(逆コンパイルkotlinクラスを参照してください)
public final class TestClass {
public static final Companion companion = ...
}
あなたはクラス名の.Companion
部分を切り捨てるか、TestClass::class.java
でハードに参照するかのどちらかとして行うことができます(私の意見では何も問題ありません。ベストソリューション)
そこに 'javaClass'がないのはなぜですか? – miensol
'val clazz = TestClass :: class.java'はどうでしょうか? – marstran
ああ、私の悪い、質問を明確にしました - 私はコンパイル時に名前を知らずにクラスを取得したいと思います。 – shutefan