Вместо обычного if (myString == null || myString.equals(""))
я предпочитаю использовать класс org.apache.commons.lang.StringUtils
и делать if (StringUtils.isEmpty(myString))
.
Однако это — по крайней мере, так, как я это делаю — имеет огромный недостаток: потому что FindBugs — или механизм предупреждения компилятора, f. бывший. из Eclipse - больше не будет видеть явную проверку на ноль, он больше не будет рассматривать myString
как потенциально нулевой, поэтому он больше не будет выдавать предупреждения о потенциальных (или уверенных) нулевых указателях на него, и эти предупреждения чрезвычайно полезны в моем случае. Посмотреть.
Пример (ДОБАВЛЕНО):
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
, например public static boolean isEmpty(@Nullcheck String str)
, просто чтобы указать, что метод выполняет нулевую проверку этого аргумента, и сделать так, чтобы механизм предупреждения компилятора или FindBugs обрабатывают if (StringUtils.isEmpty(myString))
так же, как явную проверку на ноль?
StringUtils.isEmpty(null)
? Потому что в этом случае вам не нужно беспокоиться об этом, так какStringUtils.isEmpty()
обрабатываетnull
самостоятельно, и поэтому FindBugs не будет беспокоить вас ненужными предупреждениями. Читайте документы для получения дополнительной информации. - person RainMaker   schedule 05.06.2014isEmpty
; просто если я делаюif (myString == null)
и несколько строк ниже - вне этогоif
- я делаю например.myString.length()
Я получу предупреждение компилятора о потенциальном нулевом указателе наmyString.length()
. Я бы не получил это предупреждение, если бы вместоif (myString == null)
я сделалif (StringUtils.isEmpty(myString))
- person SantiBailors   schedule 05.06.2014if
. Лучше опубликовать реальный код, чем описывать его прозой. - person David Harkness   schedule 06.06.2014if (myString == null)
компилятор или FindBugs понимают, чтоmyString
может быть нулевым, а сif (StringUtils.isEmpty(myString))
они этого не понимают, что я считаю достаточно справедливым. Однако я добавил пример к моему вопросу. - person SantiBailors   schedule 06.06.2014@Nullable
(code.google.com/p/jsr-305/source/browse/trunk/ri/src/main/java/ ) или аннотацию FindBugs@CheckForNull
? - person JB Nizet   schedule 06.06.2014@Nullable
, но безрезультатно. Я использовал его в соответствии с одним из их примеров.import javax.annotation.Nullable;
public class TestWarning {
` void testWarning(String myString) {` ` if (isEmpty(myString)) { /* Что угодно. */ }` ` int x = myString.length(); // Предупреждение об ошибке не отображается.` ` }` ` public static boolean isEmpty(@Nullable String str) {` ` return str == null || str.length() == 0;` ` }`}
- person SantiBailors   schedule 06.06.2014