使用对象的类通过反射构造对象

时间:2012-02-06 11:57:10

标签: java generics reflection

假设代码如下:

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());

任何帮助将不胜感激!

3 个答案:

答案 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();
    } 
}