Java Custom Generic List:add()方法错误

时间:2014-07-05 20:49:53

标签: java generics

我有一项任务,我必须为自定义通用列表实现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));
    }

}

我收到以下错误:

enter image description here

我无法弄明白为什么......

有人可以帮助我吗?

整个代码可用here,还有一些关于任务here的文档。如果你发现一些瑕疵,我会很高兴听到它们!

谢谢!

1 个答案:

答案 0 :(得分:3)

您在MyGenericListAbstract <Integer>中保留对list0的引用,而它没有add方法,正如您之前在评论中所说的那样。编译器没有看到基于列表引用的方法。

您应该将引用类型更改为MyEmptyList <Integer>或将add(T e)方法移至MyGenericListAbstract类。

PS。这个问题与泛型无关,它只是基本的Java继承原则。