[英]Possible null pointer exception in string utils
我正在使用Commons StringUtils.isNotBlank()检查字符串是否不为空和空白。 在某些情况下,如果输入验证没有按预期进行,则为空字符串或null。 空或空白正在通过。
if( StringUtils.isNotEmpty(obj.getvalue()) ){
.............
}
当我浏览StringUtils的文档时,发现
空处理的副作用是,应将NullPointerException视为StringUtils中的错误(不赞成使用的方法除外)。
什么剂量 这和我的情况有关系吗?
阅读您引用的句子上方的句子:
StringUtils安静地处理空输入字符串。 也就是说,空输入将返回空。 返回布尔值或整数的位置,详细信息因方法而异。
空处理的副作用是,应将NullPointerException视为StringUtils中的错误(不赞成使用的方法除外)。
因此,由于它处理null值,因此不应引发NullPointerExceptions。
如果您查看方法isNotBlank
,则会找到此表:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
如果您收到其他值,则确实确实遇到了错误,应报告此错误。 但是NPE更有可能是由其他原因引起的。 例如,也许其他StringUtils方法返回null。
在某些情况下,如果输入验证没有按预期进行,则为空字符串或null。 空或空白正在通过。
验证逻辑中有错误,或者数据来自未经验证的来源。
如果您发布了实际的代码和NPE stacktrace,我们可以帮助您找到它。
这是什么意思?
这意味着如果StringUtils.isNotBlank()
抛出NPE,则该方法中存在错误。 (javadoc所说的“副作用”是逻辑上的副作用;即,API定义方式的次要逻辑结果。)
这和我的情况有关系吗?
它有什么关系呢?除非给呼叫StringUtils.isNotBlank()
被抛出NPE。
UPDATE
考虑您的示例代码(出于说明目的进行了调整):
if (StringUtils.isNotEmpty(obj.getvalue())){
String s = obj.getvalue();
if (s == null) {
System.err.println("Ooops!!");
}
}
我可以想到许多情况,这些代码可能会导致NPE或导致“糟糕!”。 待打印。 例如:
如果obj
为null
则肯定会引发NPE。 这可能在调用isNotEmpty
之前发生,或者(如果可以更改obj
变量的值可以更改)在“ then”块中发生。
getValue
方法可能会抛出NPE。
调用getValue
可能(但不太可能)具有副作用,导致其在第二次调用中更改obj
的状态并返回不同的值(例如null
)。 哎呀!
当前线程正在执行上述代码时,其他某个线程可能正在更改obj
对象的状态。 哎呀!
这些问题大多数可以通过以下方式“修复”:
String s = obj.getvalue();
if (StringUtils.isNotEmpty(s)){ // No NPE possible here now
if (s == null) {
System.err.println("Ooops!!"); // Cannot happen now.
}
}
为了详细检查您的问题,您可以发布一个特定示例,其中您认为代码有问题。
StringUtils行为
如果行为是别的,这是库中的错误
NPE是否从obj.getvalue()
抛出,因为StringUtils.isNotBlank()永远不会抛出NPE。 如果您在多线程环境中运行代码,则可以使您的方法同步,以防止从多个源同时访问您的方法。
要获得更多帮助,您可以发送stack trace
或code block
吗?
实际上, StringUtils.isNotBlank()
方法或文档中都存在错误。 如果将null
传递给isNotBlank()
,则会抛出NullPointerException
isNotBlank()
,与文档相反。 因此,一个或另一个(代码或文档)不正确。
这是使用Guave的一个很好的替代品,来自: http : //www.javaworld.com/article/2074361/core-java/checking-for-null-or-empty-or-white-space-only-string-in-java。 HTML
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.