我有课:
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/