Java равняется () упорядочиванию

Если я пытаюсь сделать a .equals() на пустой строке в Java будет брошено исключение нулевого указателя. Я задаюсь вопросом, если я пытаюсь выдержать сравнение, если строка равна некоторой постоянной строке, могу я делать следующее:

MY_CONSTANT_STRING.equals(aStringVariable)

Я знаю, что это будет работать, но является этим просто действительно плохой код?

8
задан bakkal 5 August 2010 в 09:02
поделиться

6 ответов

Это стандартная идиома Java, в шутку называемая условием Йоды .

Лично я предпочитаю обрабатывать нулевой случай явно, но метод Йоды используется очень часто, и любой опытный программист на Java должен сразу понять, что происходит. Это нормально использовать.

21
ответ дан 3 November 2019 в 13:08
поделиться

То, что у вас есть, прекрасно. Можно даже использовать литерал String.

if( "value".equals(variable) ) {
    ...

Если вам это не нравится, вы всегда можете явно проверить на null и равенство, и объединить эти две проверки с помощью &&. Замыкание оператора гарантирует, что вы никогда не получите NPE.

if( (variable != null) && variable.equals("value") ) {
    ...
5
ответ дан 3 November 2019 в 13:08
поделиться

это просто очень плохой код?

Нет, многие люди именно так кодируют оператор, чтобы избежать NPE.

6
ответ дан 3 November 2019 в 13:08
поделиться

Если вы беспокоитесь о качестве своего кода, напишите вспомогательный класс, который позаботится о проверке равенства:

public class ObjectHelper {
    public static boolean testEquality(Object o1, Object o2) {
        if (o1 == null && o2 == null) return true;
        if (o1 == null) return false;
        return o1.equalts(o2);
    }
}

Затем используйте его следующим образом:

if (ObjectHelper.testEquality(aStringVariable, My_CONSTANT_STRING))

Ваша так называемая константа МОЖЕТ перестать быть константой. В будущем она может быть считана из конфигурационного файла.

0
ответ дан 3 November 2019 в 13:08
поделиться

Я бы оставил код «CONSTANT.equals (possibleNull)» без нулевого теста только в том случае, если это нормальное условие, когда переменная может быть нулевой - например, потому что она только что вышла из карта собственности.

Точно так же вы можете избежать проверки на null в instanceof-check, например:

Food dinner = map.get("dinner");
if (dinner instanceof Soup) {
      ((Soup)blah).eat();
}  // We don't care if it is a Fish or null

Но если вы действительно не ожидали null, вам следует явно проверить это в отдельном if-тесте и обработать его соответствующим образом. Как правило, такие ошибки данных лучше обнаруживать заранее, чем позже.

1
ответ дан 3 November 2019 в 13:08
поделиться

Нет, обычно это делается, чтобы избежать NPE. Однако я обычно предпочитаю выполнять явную проверку на null.

0
ответ дан 3 November 2019 в 13:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: