Поскольку это сравнит Enum с Объектом enum

Когда я изучал Яву, у меня был Класс, у которого была собственность типа Enum, и, в определенный момент, я хотел знать если, что это прибылось в Метод, я совпал с постоянным из Enum, что-то так:

public void teste( TipoAlteracaoValor valor ) {
        if( valor.equals(TipoAlteracaoValor.ALTERACAO_VALOR) ) {
            System.out.println( "é Alteração ");
        }
        //Deveria ser assim:
        if( TipoAlteracaoValor.ALTERACAO_VALOR.equals(valor)) {
            System.out.println("é Alteração" );
        }
    }

Но они сказали мне, что это пропущено сделать, определенный должен сравнить Постоянный из Enum со стоимостью, которая прибудется для параметра. Однако разве я не помню..., что техническая причина состоит в том, чтобы состоять в том, чтобы использовать это сравнение?

2
задан 26.10.2019, 15:38
2 ответа

Проблема с valor.equals(TipoAlteracaoValor.ALTERACAO_VALOR) факт - это если параметр valor это будет пустым, тогда Вы получите исключение NullPointerException из-за попытки получить доступ к методу equals в пустом объекте.

Другая форма решает проблему потому что «константа один» TipoAlteracaoValor.ALTERACAO_VALOR это никогда не будет пустым и, я женюсь на параметре valor будьте также нет никаких проблем, просто это if это не будет выполненным.

Однако я могу сказать, что лучшая форма сравнения Enums на Яве не является ни одним из представленных двух.

Вы можете использовать просто оператора ==, как с примитивными типами.

Это == когда применено к объектам, это проверяет, является ли то же там тем же постоянством. И это - просто преимущество Enum. Каждый «постоянный один» Enum является на самом деле единственным постоянством того же самого.

Рассмотрите кодекс:

public void teste( TipoAlteracaoValor valor ) {
    if( valor == TipoAlteracaoValor.ALTERACAO_VALOR ) {
        System.out.println( "é Alteração ");
    }
}

Помимо более четкого он не подвергается проблеме с null.


Фонтаны на предмете (на английском языке):

2
ответ дан 20.11.2019, 21:17

Выдерживая сравнение я ем вниз, Вы будете в состоянии взять NullPointerException. Вообразите то, что произошло бы, если бы переменное значение было нулевым:

    if( valor.equals(TipoAlteracaoValor.ALTERACAO_VALOR) ) {
        System.out.println( "é Alteração ");
    }

Сравнивая enum с объектом, который прибыл, Вы стараетесь не брать ошибку, если признак ПУСТОЙ:

    if( TipoAlteracaoValor.ALTERACAO_VALOR.equals(valor)) {
        System.out.println("é Alteração" );
    }

Так это делает, если значение будет нулевым или не, то у Вас не будет исключения.

Только то, что самостоятельно. [=

3
ответ дан 20.11.2019, 21:17