抱歉,我知道以前有人问过类似的问题,但没有一个能解决我当前的问题。
我目前有这样的事情:
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()
始终返回 a List<MyAbstractParameter>
,它确实返回了,但是它给了我这个警告,而且我理解它背后的原因是,如果我发送 的列表MyOtherParameter extends MyAbstractParameter
,演员表会失败,我会哭。
所以我决定去private List<? extends MyAbstractParameter> list;
,但我不得不修改一切,这样就没有问题了<? ...>
。
那么......如果这样做,是否有另一种方法,同时避免修改所有内容?我的意思是..喜欢在不使用的情况下
做某事。MyAbstractClass
@SuppressWarning("unchecked")