我最近在做一个大量使用 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;
}
};
dto object 是外循环中的一个对象,但仍然可以访问。
apply 方法的返回永远不会返回 True,但是如果我用像 1740 这样的实数替换 dto.getSid(),这是从 db 获取的父节点号,结果很好。
所以我想我不能在 apply() 中计算变量?
我注意到 apply() javadoc 有一行说:
Its execution does not cause any observable side effects
这应该是这个问题的关键吗?
最佳答案
它应该没问题 - 尽管 dto
需要是一个最终变量,如果这是在一个方法中并且 dto
是一个局部变量。
dto.getSid()
是否可能返回一个 Integer
而问题是它只是比较引用而不是值?您可以通过使用以下方式使代码更整洁和:
@Override
public boolean apply(ProductClassDTO pcLevel2) {
return Objects.equal(pcLevel2.getFatherNodeSid(), dto.getSid());
}
关于java - 我可以在谓词应用方法中评估变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7241562/