Queue.poll() 的效果
Effect of Queue.poll()
我正在尝试更正外部项目中 Eclipse 中的 FindBugs 插件发现的一些错误,但出现以下错误:
Method ignores return value
在这段代码中:
int maxSize;
Queue<e> queue;
(...)
while (queue.size() > maxSize) {
queue.poll();
}
不幸的是,这超出了我的知识范围,我想知道 poll()
方法除了返回 E
类型对象之外的效果是什么?如果我只是删除这段代码可以吗?
poll()
方法将删除当前作为队列头部的对象,并因此 return 它。
在列出的代码中删除 poll()
将意味着 while
循环将无休止地 运行,因为您永远不会通过从队列中删除元素来更改队列长度。
FindBugs 警告意味着您正在调用一个 return 类型不是 void
的方法,并且您没有将结果分配给另一个变量或在表达式中使用它。我不会修改代码,而是尝试使用注释抑制警告或忽略整个警告。
FindBugs 维护着一个方法数据库,return 通常 必须 检查这些方法。 Queue.poll()
方法在这个数据库中是 explicitly present:
addMethodAnnotation("java.util.Queue", "poll", "()Ljava/lang/Object;", false,
CheckReturnValueAnnotation.CHECK_RETURN_VALUE_LOW);
请注意,警告优先级被指定为低,因此在这种情况下,FindBugs 不能完全确定您是否做错了事。
虽然你的代码看起来是安全的(至少对于非并发Queue
),但一般来说,如果你想删除队列元素并且你绝对确定队列是非空的,那更好使用 Queue.remove()
。在这种情况下,如果出现问题,您将得到 NoSuchElementException
而不是默默地不正确的行为。错误应该会自行显现。
所以在这里你可以忽略这个错误(使用注释或使用 xml 排除过滤器)或将 poll()
替换为 remove()
.
我正在尝试更正外部项目中 Eclipse 中的 FindBugs 插件发现的一些错误,但出现以下错误:
Method ignores return value
在这段代码中:
int maxSize;
Queue<e> queue;
(...)
while (queue.size() > maxSize) {
queue.poll();
}
不幸的是,这超出了我的知识范围,我想知道 poll()
方法除了返回 E
类型对象之外的效果是什么?如果我只是删除这段代码可以吗?
poll()
方法将删除当前作为队列头部的对象,并因此 return 它。
在列出的代码中删除 poll()
将意味着 while
循环将无休止地 运行,因为您永远不会通过从队列中删除元素来更改队列长度。
FindBugs 警告意味着您正在调用一个 return 类型不是 void
的方法,并且您没有将结果分配给另一个变量或在表达式中使用它。我不会修改代码,而是尝试使用注释抑制警告或忽略整个警告。
FindBugs 维护着一个方法数据库,return 通常 必须 检查这些方法。 Queue.poll()
方法在这个数据库中是 explicitly present:
addMethodAnnotation("java.util.Queue", "poll", "()Ljava/lang/Object;", false,
CheckReturnValueAnnotation.CHECK_RETURN_VALUE_LOW);
请注意,警告优先级被指定为低,因此在这种情况下,FindBugs 不能完全确定您是否做错了事。
虽然你的代码看起来是安全的(至少对于非并发Queue
),但一般来说,如果你想删除队列元素并且你绝对确定队列是非空的,那更好使用 Queue.remove()
。在这种情况下,如果出现问题,您将得到 NoSuchElementException
而不是默默地不正确的行为。错误应该会自行显现。
所以在这里你可以忽略这个错误(使用注释或使用 xml 排除过滤器)或将 poll()
替换为 remove()
.