有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中使用泛型返回空值

我试图用泛型在Java中实现一个pop()方法,我的方法如下:

public T pop(){
        T elem;
        if (list!=null){
            elem=list.get(this.getSize()-1);
            list.remove(this.getSize()-1);
            return elem;
        }
        else return null;
    }

如果我把一些n值放在堆栈上,并想打印它们的值,我将执行以下操作:

System.out.println(stack.pop());

我遇到的问题是,当我想弹出一个n+1值而不是打印一个空值时,它会返回一个错误,即:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

当堆栈为空时,是否有方法打印空值?因为我将返回一个泛型类型T,据我所知,Java无法提前判断它将是哪个对象

谢谢


共 (3) 个答案

  1. # 1 楼答案

    如果您的列表为空,那么您肯定会得到ArrayIndexOutofBounds,因为您尝试在索引-1处获取元素。可以使用isEmpty检查列表是否为空

    顺便说一句,remove将从列表中返回已删除的元素,您不必事先执行get

    在最后一句话中,java泛型是编译时发生的事情。不允许将数组放入字符串列表。但它们在运行时没有区别

  2. # 2 楼答案

    public T pop() {
        T elem;
        if (list!=null || list.isEmpty()) {
            elem=list.get(this.getSize()-1);
            list.remove(this.getSize()-1);
            return elem;
        } else return null;
    }
    

    检查列表是否为空,而不仅仅是空isEmpty()可能需要根据所使用的结构进行更改

  3. # 3 楼答案

    你必须检查列表是否为空

    引发异常是因为当列表为空(size=0)时,您试图获取(size-1)元素(索引:-1)。在java中,数组的索引从0开始,所以ArrayOutOfBoundsException出现了

    public T pop(){
        T elem;
        if (list != null || list.isEmpty()){
            elem = list.get(this.getSize()-1);
            list.remove(this.getSize() - 1);
            return elem;
        }
        else return null;
    }