【发布时间】:2011-12-28 18:52:13
【问题描述】:
我不明白为什么当参数化类型被定义为扩展基类时编译器看不到强制转换是安全的。以下是在我看来应该是不必要的演员表示例。此外,当我确实包含演员表时,我的 IDE (IntelliJ IDEA) 会警告演员表未被检查,好像在暗示我做错了什么。有没有避免这些强制转换和警告的成语?既然声明声明类型扩展了基类,为什么还需要强制转换?
class Shape {}
class Polygon extends Shape {}
public class Foo<T extends Shape>
{
Set<Polygon> polygons;
// Why must this be cast?
Set<T> shapes = (Set<T>) new HashSet<Polygon>();
T getFirst()
{
// Why must this be cast?
return (T) polygons.iterator().next();
}
Iterable<T> getShapes()
{
// Why must this be cast?
return (Iterable<T>) polygons;
}
}
【问题讨论】:
标签: java generics collections casting