【发布时间】:2014-07-26 05:42:39
【问题描述】:
我倾向于使用org.apache.commons.lang.StringUtils 类而不是通常的if (myString == null || myString.equals("")),并使用if (StringUtils.isEmpty(myString))。
但是,这 - 至少我这样做的方式 - 有一个巨大的缺点:因为 FindBugs - 或编译器警告机制,f。前任。来自 Eclipse - 将不再看到显式的 null 检查,它将不再将 myString 视为可能为 null,因此它将不再发出有关其潜在(或确定)空指针的警告,并且这些警告非常有用在我看来。
示例(添加):
import org.apache.commons.lang.StringUtils;
public class TestWarning
{
void testWarning(String myString)
{
//if (myString == null || myString.equals("")) // With this, the last line shows the warning.
if (StringUtils.isEmpty(myString)) // With this, no warning.
{
// Anything.
}
int x = myString.length(); // Warning is here: "Potential null pointer access: The variable myString may be null at this location"
}
}
所以我只是想确保没有办法消除或最小化这个缺点,以便人们可以使用StringUtils.isEmpty 并仍然收到空指针警告。也许像@Nullcheck 这样的注释要添加到isEmpty 方法或其他东西?
添加:例如,创建像@Nullcheck 这样的自定义注释是否可行,将其添加到isEmpty 的arg 就像public static boolean isEmpty(@Nullcheck String str) 只是为了表明该方法对该arg 进行空检查, 并让编译器警告机制或 FindBugs 将 if (StringUtils.isEmpty(myString)) 视为显式空检查?
【问题讨论】:
-
StringUtils.isEmpty() 处理 null 那么为什么 FindBugs 应该引发“可能为 null”的警告呢?我在这里没有收到您的问题...
-
您担心什么空指针警告?你能再解释一下吗?您是否想要在尝试检查以下内容时可能会引发 NPE 的警告:
StringUtils.isEmpty(null)?因为如果是这种情况,那么您不必担心它,因为StringUtils.isEmpty()会自行处理null,因此 FindBugs 不会因不必要的警告而困扰您。 Read the docs 了解更多信息。 -
我不担心
isEmpty中的空指针;只是如果我做if (myString == null)和下面的一些行 - 在if之外 - 我为前做。myString.length()我将收到一个关于myString.length()潜在空指针的编译器警告。如果我不使用if (myString == null)而不是if (StringUtils.isEmpty(myString)),我将不会收到该警告 -
编译器甚至像 FindBugs 这样的工具都有限制,而您刚刚找到了一个。基本上这就是为什么你作为程序员需要使用你的大脑:)
-
对。但这适用于许多旨在最大程度减少错误的结构和工具 - 意外或由于无知 - 我有点喜欢这样 ;)
标签: java compiler-warnings apache-commons findbugs null-pointer