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类实际上是可执行的,我完全不明白为什么它会投诉。
提前致谢。
答案 0 :(得分:1)
IncompatibleClassChangeError
表示您正在加载的类文件出错。在这种情况下,听起来Importable
最初是编译C1
时的类,现在您已将其更改为接口。由于JVM关注extends SomeClass
和implements SomeInterface
之间的区别,因此您需要针对当前C1
接口重新编译Importable
(并且可能还会更改其代码extends
1}}到implements
。