java - 如何返回泛型方法?

标签 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

    }

最佳答案

您需要转换:

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

不过,您会收到未经检查的强制转换警告。只要您确保仅将 E 的实例添加到数组中,就可以安全地抑制此操作。

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

(这几乎就是 java.util.ArrayList 所做的,顺便说一句)

关于java - 如何返回泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55973278/

相关文章:

java - 为什么Java中字符串变量的声明是大写的?

java - 具有泛型的 gson 的正确语法

c# - 如何将值存储到通用类字段中 (Mono.Cecil)

pandas - 使用熔化、堆栈和多索引 reshape 数据框?

c++ - 错误 C2955 : 'CELL' : use of class template requires template argument list C++ Stack

java - 为什么这段代码没有触发ConcurrentModificationException?

java - 在什么情况下我需要提供 spring 类名称作为 bean id 值?

java - 使用 catch block 中的方法将对象分配给变量

python - 通用单例的类型提示?

java - 将文本文件读入 Stack 并按相反顺序打印出元素