0
對不起,我知道以前也有類似的問題,但沒有一個解決我當前的問題。當從MyAbstractParameter投射到T時,未經檢查的投射警告
我現在有這樣的事情:
abstract class MyAbstractParameter{ /* Some methods/parameters */ }
class MyParameter extends MyAbstractParameter { /*more methods/parameters*/ }
abstract class MyAbstractClass<T extends MyAbstractParameter> extends Thread{
private List<MyAbstractParameter> list;
public MyAbstractClass(List<MyAbstractParameter> list) { this.list = list; }
public List<MyAbstractParameter> getList() { return list; }
public void run() {
for(MyAbstractParameter e : list) {
doStuffWithList((T) e); // WARNING IS HERE WHEN CASTING! ! !!
}
}
public abstract void doStuff(T element);
}
class MyClass extends MyAbstractClass<MyParameter> {
public MyClass(List<MyAbstractParameter> list) { super(list); }
public void doStuff(MyParameter element) { /* does something */ }
}
我想,該方法getList()
總是返回List<MyAbstractParameter>
,它本身,但它給了我這個警告,我明白,這背後的原因是如果我發送MyOtherParameter extends MyAbstractParameter
的列表,演員陣容將失敗,我會哭泣。
所以我決定去private List<? extends MyAbstractParameter> list;
,但我不得不修改一切,以便這個<? ...>
沒有問題。
那麼...有沒有另一種方法,如果這樣做,而避免修改一切?
我的意思是......喜歡在MyAbstractClass
中做某件事,而不使用@SuppressWarning("unchecked")
。
我知道,但我想這樣做,其他類:'名單 otherList = myClass.getList()',它不讓我,我不得不將它更改爲'List <?擴展MyAbstractParameter> otherList',這是我想避免的。 –
Goodwine
2013-05-03 21:04:22
或者這是正確的事情嗎? – Goodwine 2013-05-03 21:05:07
如果你想返回一個調用者可以添加任何MyAbstractParameter實例的列表,那麼你應該創建一個'List'的副本並返回它。否則,您應該返回一個列表。 –
2013-05-03 21:07:55