Хотите проверить, что значение параметра равно нулю в строке запроса - PullRequest
0 голосов
/ 04 марта 2010

Я использую сервлет, чтобы делать разные вещи.

Если определенный параметр "t" не существует, я хочу выполнить определенные типы обработки, если он хочет, я хочу делать разные вещи.

Я пытаюсь проверить параметр t (который я сохраняю как строку с именем editType), используя следующее условие:

String editType = request.getParameter("t");
if(!editType.isEmpty()||!(editType==null)){
    //processing here
}

Как правильно выполнить этот тест, потому что у меня проблема с нулевым определением, потому что мой код всегда ожидает значение для "t", мне нужно иметь возможность создать условие, которое не ожидает t ( позволяет ему быть нулевым), и выполнять обработку в этом.

Ответы [ 6 ]

15 голосов
/ 04 марта 2010

Вам нужно немного переупорядочить сравнение, в частности, сначала проверить null:

String editType = request.getParameter("t");
if(editType!=null && !editType.isEmpty()){
    //processing here
}

Проблема, с которой вы столкнулись, заключается в том, что Java пытается вызвать метод isEmpty() для объекта null, поэтому вам нужно сначала проверить null.

Java использует Оценка короткого замыкания , что означает, что он будет проверять ваши условия слева направо, и как только он найдет условие, которое позволит ему решить результат всего условия, он прекратит оценку , Поэтому, если editType окажется нулевым, Java прекратит оценку всего оператора if и не будет пытаться вызвать isEmpty() (что приведет к NullPointerException).

2 голосов
/ 04 марта 2010

Ах, я вижу, вы пометили nullpointerexception, поэтому я делаю предположение.Сначала вы должны проверить на нулевое значение, а затем на пустоту:

if (editType != null || !editType.isEmpty()) {
    //processing here
}

Однако это будет иметь значение true, если editType - пустая строка.Чтобы получить правильный результат, вы должны использовать AND (&&) вместо OR (||), например:

if (editType != null && !editType.isEmpty()){
    //processing here
}
1 голос
/ 04 марта 2010

Вы должны изменить это на

String editType = request.getParameter("t");
if(editType != null && !editType.isEmpty()){
    //processing here
}

Полезно иметь некоторый класс StringUtil, который предлагает метод ifEmpty (), поскольку это довольно часто встречается:

public static final class StringUtil {
    private StringUtil() {
    }

    public static boolean isEmpty(String s) {
        return s != null && !s.isEmpty();
    }
}

Чем поменять код на

String editType = request.getParameter("t");
if(!StringUtil.isEmpty(editType)){
    //processing here
}
0 голосов
/ 04 марта 2010
String editType = request.getParameter("t");
if(!(editType == null || editType.isEmpty())){
   //processing here
}

Для некоторых это звучит лучше.

0 голосов
/ 04 марта 2010

Прежде всего, условия в вашем операторе if оцениваются слева направо. Поэтому первое, что он проверяет, это editType.isEmpty (), и если editType равен нулю, у вас будет исключение нулевого указателя. Поэтому первая часть вашего if должна быть editType! = Null (предпочтительнее! (EditType == null)).

0 голосов
/ 04 марта 2010

У вас будут проблемы с запуском этого кода.

Так лучше:

String editType = request.getParameter("t");
if(editType!=null&&!editType.isEmpty()){
    //processing here
}

Нулевой тест должен быть впереди, чтобы избежать вызова метода на нуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...