Когда я изучал Яву, у меня был Класс, у которого была собственность типа 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 со стоимостью, которая прибудется для параметра. Однако разве я не помню..., что техническая причина состоит в том, чтобы состоять в том, чтобы использовать это сравнение?
Проблема с 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
.
Фонтаны на предмете (на английском языке):
Выдерживая сравнение я ем вниз, Вы будете в состоянии взять NullPointerException. Вообразите то, что произошло бы, если бы переменное значение было нулевым:
if( valor.equals(TipoAlteracaoValor.ALTERACAO_VALOR) ) {
System.out.println( "é Alteração ");
}
Сравнивая enum с объектом, который прибыл, Вы стараетесь не брать ошибку, если признак ПУСТОЙ:
if( TipoAlteracaoValor.ALTERACAO_VALOR.equals(valor)) {
System.out.println("é Alteração" );
}
Так это делает, если значение будет нулевым или не, то у Вас не будет исключения.
Только то, что самостоятельно. [=