私有静态可导入getRightInstance(字符串)引发异常{
C类=类.forname(s).assubClass(importable.class);
importable i=c.newInstance();
返回I;
}
我也可以写

private static Importable getRightInstance(String s) throws Exception {
   Class<? extends Importable> c = (Class<? extends Importable>)Class.forName(s);
   Importable i = c.newInstance();
   return i;
}


private static Importable getRightInstance(String s) throws Exception {
   Class<?> c = Class.forName(s);
   Importable i = (Importable)c.newInstance();
   return i;
}

其中importable是接口,s是表示实现类的字符串。
好吧,不管怎样,它给出了以下信息:
Exception in thread "main" java.lang.IncompatibleClassChangeError: class C1 has
interface Importable as super class

下面是堆栈跟踪的最后一个片段:
 at java.lang.Class.forName(Class.java:169)
 at Importer.getRightImportable(Importer.java:33)
 at Importer.importAll(Importer.java:44)
 at Test.main(Test.java:16)

现在,c1类实际上实现了importable,我完全不明白它为什么会抱怨。
提前谢谢。

最佳答案

IncompatibleClassChangeError表示加载的类文件有问题。在本例中,当编译Importable时,C1听起来像是一个类,现在您已经将其更改为一个接口。由于jvm关心extends SomeClassimplements SomeInterface之间的区别,因此需要针对当前的C1接口重新编译Importable(可能还需要将其代码从extends更改为implements

关于java - Java Class <T>静态方法forName()IncompatibleClassChangeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2893221/

10-09 19:13