通用所需的强制转换

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)

谢谢.

Ren*_*ink 5

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

想想这个子类

public class SubColumnBuilder extends ColumnBuilder<AnotherCompositeColumnImpl> {
}

public class AnotherCompositeColumnImpl implements ICompositeColumn{
}
Run Code Online (Sandbox Code Playgroud)