我最近研究了一个大量使用Guava提供的集合过滤功能的项目,但我发现这样的东西不会产生预期的行为:
Predicate<ProductClassDTO> secLevelPredicate = new Predicate<ProductClassDTO>() {
@Override
public boolean apply(ProductClassDTO pcLevel2) {
if (pcLevel2.getFatherNodeSid() != null)
return pcLevel2.getFatherNodeSid() == dto.getSid();
else
return false;
}
};
Run Code Online (Sandbox Code Playgroud)
dto object是外部循环中的对象,但仍可访问.
返回那个apply方法永远不会得到True,但是如果我用实数来替换dto.getSid(),比如1740,这是父节点数从db得到的,结果很好.
所以我认为我无法在apply()中评估变量?
我注意到apply() javadoc有一行说:
它的执行不会引起任何可观察到的副作用
这应该是这个问题的关键吗?
它应该没问题 - 尽管dto
如果它在一个方法中并且dto
是局部变量,则需要是最终变量.
是否有可能dto.getSid()
返回一个Integer
而问题是它只是比较引用而不是值?您可以通过使用以下方式使代码更整洁和正确:
@Override
public boolean apply(ProductClassDTO pcLevel2) {
return Objects.equal(pcLevel2.getFatherNodeSid(), dto.getSid());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1288 次 |
最近记录: |