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