我有一個擴展Paint的參數的泛型類。我真的不明白爲什麼我應該在第一個構造函數中手動將它投射到T上。我究竟做錯了什麼?或者當編譯器無法確定自己的安全模式時,情況就是如此?如何手動投射泛型類型?
public class XYPlot <T extends Paint> extends AbsPlot implements XYChartElement {
public XYPlot(AbsSeries series){
setUp(series, (T) new Paint(DEFAULT_PAINT));//TODO
}
public XYPlot(AbsSeries series, T paint){
setUp(series, paint);
}
private void setUp(AbsSeries series, T paint){
if(series == null) throw new NullPointerException("Series is null");
setSeries(series);
setPaint(paint);
}
好吧,現在我明白了這個問題。所以我決定讓子類創建像這樣的默認值。這是一個好主意嗎? '公共抽象類包裝器 {0}私有final T值; () public wrapper() { value = getDefaultValue(); () } public abstract T getDefaultValue() public T getValue() { return value; } }' –
@KorniltsevAnatoly:好吧,沒關係,只要你有每個類型參數的子類...否則它變得同樣棘手。如果你正在創建子類,爲什麼不讓子類構造函數將值傳遞給超類構造函數,而不是使用虛方法? –
那更好! –