我正在编写 Java(不是 Scala)代码,其中有一个 JavaClass
参考,指的是 Scala 类型T
:
trait T {}
我现在想通过仅使用 Java 反射来发现 JavaClass
引用和对应的单例实例,object T
然后调用该伴随对象中的方法。
object T {
def someMethod : String = "abc";
}
我对生成的 Scala 代码进行了逆向工程,以编写以下 Java 代码:
Class<?> traitClass = ...;
Class<?> companionClass = Class.forName(traitClass.getName() + "$");
Field module = companionClass.getField("MODULE$");
Object companion = module.get(companionClass);
String abc = (String) companionClass.getMethod("someMethod").invoke(companion);
这看起来不是很健壮——它可能会随着未来的 Scala 编译器随时改变。有没有更健壮的方法?我也愿意调用 Scala API(来自 Java)来发现伴随实例。