首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中使用泛型返回空值

问在Java中使用泛型返回空值
EN

Stack Overflow用户
提问于 2018-06-13 02:33:37
回答 3查看 1.2K关注 0票数 0

我试图使用Generics在Java中实现pop()方法,我的方法如下:

代码语言:javascript
复制
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个值,并且想要打印它们的值,那么我将执行以下操作:

代码语言:javascript
复制
System.out.println(stack.pop());

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

代码语言:javascript
复制
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

当堆栈为空时,是否存在打印空值的方式?因为我正在返回一个泛型类型T,而且据我所知,Java无法预先判断它将是哪个对象。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-13 02:40:20

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-06-13 02:41:12

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2018-06-13 02:43:56

你必须检查列表是否是空的。

引发异常是因为当列表为空(size = 0)时,您将尝试获取(size -1)元素(index:- 1)。在java中,数组被索引为0,因此ArrayOutOfBoundsException出现了。

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50828317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档