假设代码如下:
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());
任何帮助将不胜感激!
答案 0 :(得分:0)
编译:
public Class<? extends Component> getComponent() {
// Compiles!
return ConcreteComponent.class;
}
答案 1 :(得分:0)
返回(Class&gt;)ConcreteComponent.class;
答案 2 :(得分:0)
您可以使用以下任一代码。 您提到的返回类型应该与您返回的值匹配,因此您需要将其转换为返回类型。
public class ConcreteComponent<T> implements Component<T> {
public Class<? extends Component<?>> getComponent() { // Does not compile!
return (Class<? extends Component<?>>) ConcreteComponent.class;
}
}
OR
public class ConcreteComponent<T> implements Component<T> {
public Class<? extends Component<?>> getComponent() {
return (Class<? extends Component<?>>) this.getClass();
}
}