首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Queue.poll()效应

Queue.poll()效应
EN

Stack Overflow用户
提问于 2015-11-06 14:11:24
回答 2查看 1.4K关注 0票数 1

我正在尝试纠正Eclipse中的FindBugs插件在外部项目中发现的一些bug,并得到以下错误:

方法忽略返回值。

在这段代码中:

代码语言:javascript
复制
int maxSize;
Queue<e> queue;

(...)

while (queue.size() > maxSize) {
    queue.poll();
}

不幸的是,这是我所不知道的,我想知道除了返回E类型对象之外,E方法的作用是什么?如果我刚删除了这段代码,可以吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-06 14:15:49

poll()方法将删除当前队列的头对象,并作为结果返回它。

在列出的代码中删除poll()将意味着while循环将无休止地运行,因为您从不通过从其中删除元素来更改队列长度。

FindBugs警告意味着您正在调用一个方法,该方法的返回类型不是void,也不是将结果赋值给另一个变量或在表达式中使用它。我不会修改代码,而是尝试使用注释来抑制警告,或者忽略整个警告。

票数 2
EN

Stack Overflow用户

发布于 2015-11-09 05:29:58

FindBugs维护一个方法数据库,通常必须检查这些方法的返回类型。这个数据库中的Queue.poll()方法是显式存在

代码语言:javascript
复制
addMethodAnnotation("java.util.Queue", "poll", "()Ljava/lang/Object;", false,
            CheckReturnValueAnnotation.CHECK_RETURN_VALUE_LOW);

请注意,警告优先级被分配给LOW,因此在本例中,FindBugs并不完全确定您是否做错了事情。

虽然您的代码看起来是安全的(至少对于非并发的Queue),但是一般来说,如果您想要删除队列元素,并且您完全确定队列是非空的,最好使用Queue.remove()。在这种情况下,如果出了问题,您将得到NoSuchElementException,而不是不正确的行为。臭虫应该表现出来。

因此,您可以忽略此bug (使用注释或xml ),也可以将poll()替换为remove()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33568727

复制
相关文章

相似问题

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