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



假设代码如下:

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

相关内容

  • 没有找到相关文章

最新更新