我在堆栈溢出中搜索这个错误,但是没有一个和我的设计完全相同。建议的术语,以帮助找到一个类似的主题,如下面的样本代码将不胜感激。
下面是一个简单的测试用例,演示了错误:
import java.util.List;
public class SimpleTest {
abstract class AbsTask<T>
{
}
abstract class AbsQueue<T extends AbsTask<?>>
{
private List<T> lst;
public void addSpecialItem()
{
lst.add(new SpecialItem()); // Error occurs here
}
}
class SpecialItem extends AbsTask<Void>
{
}
}
我正在尝试向我的抽象类添加一个方法 AbsQueue
打电话 addSpecialItem
,它将specialitem类插入到list generic list t中,后者本质上是 AbsTask
.
错误如下: The method add(T) in the type List<T> is not applicable for the arguments (SimpleTest.SpecialItem)
如果按以下方式键入“添加”行,则可以解决此错误:
lst.add((T)new SpecialItem());
有没有一种不用铸型的方法来处理这个问题 new SpecialItem()
至 T
?
3条答案
按热度按时间8ehkhllq1#
一
List<T>
应该是只能包含类型为的元素的列表T
,但您编写的代码不能确保SpecialItem
是的子类型T
.不清楚你到底想要什么,但我认为你想要的是
List<AbsTask<?>>
,不是List<T>
对于某些特定的T
延伸AbsTask<?>
.laik7k3q2#
必须示例化抽象类来定义t是什么。试试这个:
cwdobuhd3#
在那一行代码
lst.add(new SpecialItem());
编译器还不知道是什么T
是。