Class<T>和静态方法Class.forName()让我发疯
2022-09-05 00:08:48
此代码不编译。我想知道我做错了什么:
private static Importable getRightInstance(String s) throws Exception {
Class<Importable> c = Class.forName(s);
Importable i = c.newInstance();
return i;
}
其中 Importable 是一个接口,字符串 s 是实现类的名称。编译器说:
./Importer.java:33: incompatible types
found : java.lang.Class<capture#964 of ?>
required: java.lang.Class<Importable>
Class<Importable> c = Class.forName(format(s));
感谢您的任何帮助!
所有解决方案
Class<? extends Importable> c = Class.forName(s).asSubclass(Importable.class);
和
Class<? extends Importable> c = (Class<? extends Importable>) Class.forName(s);
和
Class<?> c = Class.forName(format(s));
Importable i = (Importable)c.newInstance();
给出这个错误(我不明白):
Exception in thread "main" java.lang.IncompatibleClassChangeError: class C1
has interface Importable as super class
其中 C1 实际上是在实现 Importable(因此理论上它是可转换为 Importable 的)。