假设代码如下:
public interface Component<T>
{
}
public class ConcreteComponent<T> implements Component<T>
{
}
你将如何解决这样的编译问题:
@Override
public Class<? extends Component<?>> getComponentClass() {
// Does not compile!
return ConcreteComponent.class;
}
基本上,正如您所看到的,我希望能够使用组件的类通过反射来构造对象。忽略细节,方法的声明可能看起来像这样:
public <T extends Component<?>> void createComponent(Class<? extends T> clazz)
{
}
最后:
ConcreteComponent<Integer> cmp = createComponent(getComponentClass());
任何帮助都将不胜感激!
编译:
public Class<? extends Component> getComponent() {
// Compiles!
return ConcreteComponent.class;
}
Return(class>)ConcreteComponent.class;
您可以使用以下任意一个代码。您提到的返回类型应该与您返回的值匹配,因此您需要将其强制转换为返回类型。
public class ConcreteComponent<T> implements Component<T> {
public Class<? extends Component<?>> getComponent() { // Does not compile!
return (Class<? extends Component<?>>) ConcreteComponent.class;
}
}
或
public class ConcreteComponent<T> implements Component<T> {
public Class<? extends Component<?>> getComponent() {
return (Class<? extends Component<?>>) this.getClass();
}
}