我有一项任务,我必须为自定义通用列表实现add()
方法。在我的代码中,我有以下结构:
public abstract class MyGenericListAbstract<T> {
protected transient T head;
protected transient T tail;
protected transient int size;
...
}
public final class MyEmptyList<T> extends MyGenericListAbstract {
private T[] list;
...
public final void add(T e)
{
this.getList()[this.size()] = (T) e;
}
...
private T[] getList()
{
return this.list;
}
}
我现在遇到的问题是,当我尝试这样做时:
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
MyGenericListAbstract <Integer> list0 = new MyEmptyList();
list0.add(new Integer(3));
}
}
我收到以下错误:
我无法弄明白为什么......
有人可以帮助我吗?
整个代码可用here,还有一些关于任务here的文档。如果你发现一些瑕疵,我会很高兴听到它们!
谢谢!
答案 0 :(得分:3)
您在MyGenericListAbstract <Integer>
中保留对list0
的引用,而它没有add
方法,正如您之前在评论中所说的那样。编译器没有看到基于列表引用的方法。
您应该将引用类型更改为MyEmptyList <Integer>
或将add(T e)
方法移至MyGenericListAbstract
类。
PS。这个问题与泛型无关,它只是基本的Java继承原则。