use*_*296 3 java generics casting
我上课了:
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;
}
Run Code Online (Sandbox Code Playgroud)
CompositeColumnImpl类实现ICompositeColumn接口为什么编译器需要在此行中放置cassting:
C compositeColumn = (C)new CompositeColumnImpl();
Run Code Online (Sandbox Code Playgroud)
谢谢.
因为你声明了C extends ICompositeColumn.这意味着扩展的每个类型ICompositeColumn都可以绑定,C并且您的类型CompositeColumnImpl只是其中之一.
想想这个子类
public class SubColumnBuilder extends ColumnBuilder<AnotherCompositeColumnImpl> {
}
public class AnotherCompositeColumnImpl implements ICompositeColumn{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |