我正在尝试使用此类的名称创建类的对象:
public interface Foo {
}
public class Bar implements Foo {
}
[...]
Class<Foo> c = Class.forName("com.XXX.Bar").asSubclass(Foo.class);
Foo foo = c.newInstance();
编译说:
incompatible types found :
java.lang.Class<capture#47 of ? extends com.XXX.Foo>
required: java.lang.Class<com.XXX.Foo>
这里有什么问题?
答案 0 :(得分:5)
由于c
是扩展Foo
的某个类,因此您应该使用<? extends ...>
语法在代码中表达它:
Class<? extends Foo> c = Class.forName("com.XXX.Bar").asSubclass(Foo.class);