此 FindBugs 空指针取消引用错误是否对 spring-数据规范 class 有效?
Is this FindBugs nullpointer dereference error valid for spring-data Specification class?
我在下一行收到 "Possible null pointer dereference due to return value of called method"
FindBugs 错误。
Specification spec = Specification.where(idSpec).and(nameSpec)
.and(typeSpec).and(statusSpec);
规范是 Spring 数据 JPA class。它的一些片段:
@Nullable
static <T> Specification<T> where(@Nullable Specification<T> spec) {
return spec == null ? (root, query, builder) -> null : spec;
}
@Nullable
default Specification<T> and(@Nullable Specification<T> other) {
return composed(this, other, (builder, left, rhs) -> builder.and(left, rhs));
}
这是有效的 FindBugs 错误吗?如何解决?
如何避免对 where
和 and
的每次调用进行空值检查?因为这样的 null 检查会降低代码的可读性,目前代码的可读性就像使用方法链接的查询一样。
Is this valid FindBugs error?
是的。
How to fix it?
为 null
添加测试或告诉 FindBugs 安静。
How can I avoid null
checks on each and every call of where and and? As such null checks will reduce readbility of code which currently reads just like a query using method chaining.
没有灵丹妙药。您需要执行以下操作之一:
- 添加丑陋的空检查,或者
- 为参数和结果不是
Nullable
或 的 Specification
编写自己的替换代码1
- 单独抑制 FindBugs 发现的您“知道”不是真正错误的任何潜在错误,或者
- 完全关闭该检查。
请注意,如果您禁止作为实际错误的 Findbugs 检查,您可能会在运行时遇到 NPE。因此,您有责任 使用其他技术 来查找应用程序中可能导致 NPE 的任何(真实)错误。例如,更全面的单元和系统测试。
1 - 我不确定这在技术上是否可行,但你 可能 能够编写 Specification
和朋友的子类,并且然后更改您的代码以使用它们而不是原始代码。这样做会有缺点...
Spring 已从 Specification
class 中删除这些不正确的 @Nullable
注释作为 DATAJPA-1766.
的一部分
在使用修复了上述缺陷的 Spring 版本后,现在可以正常工作了。
我在下一行收到 "Possible null pointer dereference due to return value of called method"
FindBugs 错误。
Specification spec = Specification.where(idSpec).and(nameSpec)
.and(typeSpec).and(statusSpec);
规范是 Spring 数据 JPA class。它的一些片段:
@Nullable
static <T> Specification<T> where(@Nullable Specification<T> spec) {
return spec == null ? (root, query, builder) -> null : spec;
}
@Nullable
default Specification<T> and(@Nullable Specification<T> other) {
return composed(this, other, (builder, left, rhs) -> builder.and(left, rhs));
}
这是有效的 FindBugs 错误吗?如何解决?
如何避免对 where
和 and
的每次调用进行空值检查?因为这样的 null 检查会降低代码的可读性,目前代码的可读性就像使用方法链接的查询一样。
Is this valid FindBugs error?
是的。
How to fix it?
为 null
添加测试或告诉 FindBugs 安静。
How can I avoid
null
checks on each and every call of where and and? As such null checks will reduce readbility of code which currently reads just like a query using method chaining.
没有灵丹妙药。您需要执行以下操作之一:
- 添加丑陋的空检查,或者
- 为参数和结果不是
Nullable
或 的 - 单独抑制 FindBugs 发现的您“知道”不是真正错误的任何潜在错误,或者
- 完全关闭该检查。
Specification
编写自己的替换代码1
请注意,如果您禁止作为实际错误的 Findbugs 检查,您可能会在运行时遇到 NPE。因此,您有责任 使用其他技术 来查找应用程序中可能导致 NPE 的任何(真实)错误。例如,更全面的单元和系统测试。
1 - 我不确定这在技术上是否可行,但你 可能 能够编写 Specification
和朋友的子类,并且然后更改您的代码以使用它们而不是原始代码。这样做会有缺点...
Spring 已从 Specification
class 中删除这些不正确的 @Nullable
注释作为 DATAJPA-1766.
在使用修复了上述缺陷的 Spring 版本后,现在可以正常工作了。