给定一个类 T
是 U
的子类,将 Iterator<T>
强制转换为 Iterator<U>
是否安全?假设强制转换是安全的,除了以下方式,还有更优雅(且无警告)的方法吗?
Iterator<T> it = <insert your Iterator<T> here...>;
Iterator<U> it2 = (Iterator<U>)(Iterator<? extends U>)it;
我认为该转换不会产生危险的原因如下:
Iterator<?>
不支持插入元素,因此使用Iterator<U>
替代Iterator<T>
不会破坏基础数据结构。Consumer<? super U>
可以转换为Consumer<? super T>
,但反之则不成立。 因此,Iterator<U>::forEachRemaining(Consumer<? super U> action)
将接受在Iterator<T>
中同一方法的所有合格操作的子集,并且特别地,不会引入执行Iterator<T>
不支持的操作的方法。Iterator<U>::remove()
等效于Iterator<T>::remove()
。Iterator<U>::next()
返回 T 的超类。