[英]Unchecked cast warning when casting from MyAbstractParameter to T
sorry I know similar questions have been asked before, but none of them solve my current problem. 抱歉,我知道之前曾问过类似的问题,但是没有一个问题可以解决我当前的问题。
I currently have something like this: 我目前有这样的事情:
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 */ }
}
I want that the method getList()
to always returns a List<MyAbstractParameter>
, and it does, however it gives me this warning, and I understand that the reason behind it is that if I send a list of MyOtherParameter extends MyAbstractParameter
, the cast would fail, and I will cry. 我希望方法
getList()
始终返回List<MyAbstractParameter>
,并且确实如此,但是它给了我这个警告,并且我知道背后的原因是,如果我发送MyOtherParameter extends MyAbstractParameter
的列表MyOtherParameter extends MyAbstractParameter
,则MyOtherParameter extends MyAbstractParameter
会失败,我会哭。
So I decided to go for private List<? extends MyAbstractParameter> list;
所以我决定去
private List<? extends MyAbstractParameter> list;
private List<? extends MyAbstractParameter> list;
, but I had to the modify everything so that there is no problem with this <? ...>
,但我必须修改所有内容,以便此
<? ...>
没有问题<? ...>
<? ...>
. <? ...>
。
So... Is there another way if doing it, while avoiding to modify everything? 因此...在避免修改所有内容的同时还有另一种方法吗?
I mean.. like doing something in MyAbstractClass
, without using @SuppressWarning("unchecked")
. 我的意思是..喜欢在
MyAbstractClass
中MyAbstractClass
,而不使用@SuppressWarning("unchecked")
。
If every element in the list is supposed to be a an instance of T, then the list should be a List<T>
: 如果列表中的每个元素都应该是T的一个实例,则列表应该是
List<T>
:
abstract class MyAbstractClass<T extends MyAbstractParameter> extends Thread {
private List<T> list;
public MyAbstractClass(List<T> list) { this.list = list; }
public List<T> getList() { return list; }
public void run() {
for (T e : list) {
doStuffWithList(e);
}
}
public abstract void doStuff(T element);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.