我不明白爲什麼編譯器在參數化類型定義爲擴展基類時看不到轉換是安全的。這裏有些演員在我看來應該是不必要的。此外,當我包含演員陣容時,我的IDE(IntelliJ IDEA)會警告演員陣容未被選中,好像表明我做錯了什麼。有沒有一種避免這些演員和警告的習語?爲什麼所需的演員,因爲該聲明指出,該類型擴展基類?爲什麼Java強制泛型類型被轉換?
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;
}
}
改進的拼寫:P –
我在某一時刻理解了這一點。感謝您的簡潔複習。 –