如何返回泛型方法?

时间:2019-05-03 15:50:22

标签: java generics stack

我现在正在做作业,偶然发现了一个可能很简单的“问题”。

我必须构建一个堆栈,并且需要完成以下方法:

public E top()
    {   
        if(!isEmpty()) {
            /*
             * return top element
             * which would be st[pos-1]
             */
        }
        return null;
    }

我用

//to save elements
private Object[] st;

//for position in array
private int pos = 0;

我试图返回我的数组,但是它告诉我“无法从Object转换为E”。现在我不知道如何继续。

//编辑:我的构造函数

public Stack(int size)
    {
        st = new Object[size];
        //st = new E[size]; doesn't work

    }

2 个答案:

答案 0 :(得分:2)

您需要投射:

E element = (E) st[pos-1];

不过,您将获得未经检查的强制转换警告。如果您确保仅将E的实例添加到数组,则可以安全地抑制这种情况。

void add(E element) {
  st[pos++] = element;
}

(这差不多就是java.util.ArrayList所做的,顺便说一下)

答案 1 :(得分:0)

您的数组应为E

private E[] st;