私有静态可导入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 SomeClass
和implements SomeInterface
之间的区别,因此需要针对当前的C1
接口重新编译Importable
(可能还需要将其代码从extends
更改为implements
。
关于java - Java Class <T>静态方法forName()IncompatibleClassChangeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2893221/