在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无法提前判断它将是哪个对象
谢谢
# 1 楼答案
如果您的列表为空,那么您肯定会得到ArrayIndexOutofBounds,因为您尝试在索引-1处获取元素。可以使用isEmpty检查列表是否为空
顺便说一句,remove将从列表中返回已删除的元素,您不必事先执行get
在最后一句话中,java泛型是编译时发生的事情。不允许将数组放入字符串列表。但它们在运行时没有区别
# 2 楼答案
检查列表是否为空,而不仅仅是空
isEmpty()
可能需要根据所使用的结构进行更改# 3 楼答案
你必须检查列表是否为空
引发异常是因为当列表为空(size=0)时,您试图获取(size-1)元素(索引:-1)。在java中,数组的索引从0开始,所以ArrayOutOfBoundsException出现了