Java Class <t>静态方法forName()IncompatibleClassChangeError </t>

时间:2010-05-23 20:01:12

标签: java

private static可导入的getRightInstance(String s)抛出异常{        类c = Class.forName(s).asSubclass(Importable.class);        可导入的i = c.newInstance();        回归我;     }

我也可以写

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类实际上是可执行的,我完全不明白为什么它会投诉。

提前致谢。

1 个答案:

答案 0 :(得分:1)

IncompatibleClassChangeError表示您正在加载的类文件出错。在这种情况下,听起来Importable最初是编译C1时的类,现在您已将其更改为接口。由于JVM关注extends SomeClassimplements SomeInterface之间的区别,因此您需要针对当前C1接口重新编译Importable(并且可能还会更改其代码extends 1}}到implements