Java 中的 Cast 元素 For Each 语句

2022-09-02 05:32:36

是否有可能(甚至建议)强制转换从语句本身中 for 每个语句检索到的元素?我确实知道列表中的每个元素都是类型。<SubType>

即:

List<BaseType> list = DAO.getList();  
for(<SubType> element : list){ 
    // Cannot convert from element type <BaseType> to <SubType>
    ...
}

而不是:

List <BaseType> list = DAO.getList();
for(<BaseType> el : list){
    <SubType> element = (<SubType>)el;
    ...
}

答案 1

你真的知道每个条目都是一个子类型吗?DAO只需要履行契约,如果你假设一个子类,那么我认为某个地方出了问题。我可能会更专注于使DAO的接口正确,并让它以合同方式返回您想要的内容。List<BaseType>


答案 2

由于其他人陈述的所有原因,您不应该这样做。但是,如果无法更改接口,则可能会发生以下情况:

for (BaseType element : list) {
    SubType subType = (SubType)element;
    ...
}

据我所知,这是做到这一点并保持真正类型安全的唯一方法 - 即不依赖类型擦除来捕获任何问题,直到很久以后才一定会这样做。

我意识到这并不完全是你想要的,但它确实可以处理铸造。