我有课:

class ColumnBuilder < C extends ICompositeColumn > implements IColumnBuilder < C ,
List < ColumnNameComponent > > {

    @Override
    public C getColumn(List<ColumnNameComponent> columnNameComponents) {
        Collections.sort(columnNameComponents);
        C compositeColumn = (C)new CompositeColumnImpl();

        for (ColumnNameComponent component : columnNameComponents){
            compositeColumn.add(component.getOrdinal(),component.getValue());
        }
        return  compositeColumn;
    }

CompositeColumnImpl 类实现 ICompositeColumn 接口(interface)
那么为什么编译器需要在这一行中放置强制转换:
C compositeColumn = (C)new CompositeColumnImpl();

谢谢你。

最佳答案

因为你声明了 C extends ICompositeColumn 。这意味着扩展 ICompositeColumn 的每个类型都可以绑定(bind)到 C 并且您的类型 CompositeColumnImpl 只是其中之一。

想想这个子类

public class SubColumnBuilder extends ColumnBuilder<AnotherCompositeColumnImpl> {
}

public class AnotherCompositeColumnImpl implements ICompositeColumn{
}

关于java - 泛型所需的类型转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20142818/

10-10 13:46