Sna*_*ybo 5 java generics iterator
我有以下代码:
public final <T extends Component> T getComponent(Class<T> type) {
Iterator<Component> it = components.iterator();
while(it.hasNext()) {
Component next = it.next();
if(type.isAssignableFrom(next.getClass()))
return (T)next; // Why is this an unchecked cast from Component to T?
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,return (T)next;是从Component到T.的未经检查的演员表.
我不确定为什么会这样,因为T必须扩展Component,它应该能够安全地将它转换为Component的任何子类,对吧?
如果我手动执行return (TestComponent)next;并将返回类型更改为TestComponent它工作正常,那么为什么它不适用于T?
其他人已经描述了问题,这里是解决方案(使用更清洁的测试):
if(type.isInstance(next) {
return type.cast(next);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |