반응형
enum type을 사용하다 보면 열거값을 체크하기 위해 다음처럼 사용하는 경우가 많다.
enum이 아니더라도 equals 비교 메소드의 앞부분에 null이 들어올 가능성이 있는 String 객체는 위치시키지 않는 것이 좋다.
public class B {
public enum Test {
AA("aa", "a의 설명")
, BB("bb", "b의 설명")
, CC("cc", "c의 설명")
, DD("dd", "d의 설명")
, EE("ee", "e의 설명")
, FF("ff", "f의 설명")
, GG("gg", "g의 설명")
, HH("hh", "h의 설명");
private String name;
private String description;
Test(String name, String description) {
this.name = name;
this.description = description;
}
public String value() {
return name;
}
public static String getDescription(String name) { //name에 해당하는 description을 가져오기 위한 구문
for (Test test : Test.values()) {
if (name.equals(test.name)) return test.description;
}
return null;
}
}
}
위와 같이 사용하게 되면 아래와 같이 호출하는 경우 java.lang.NullPointerException 에러가 발생한다.
String description = Test.getDescription(null);
String에 null값이 들어간 경우 static method로 equals가 존재하지만 null 값은 말 그대로 객체가 존재하지 않는 값이기 대문에 지원가능한 메소드가 없기 때문이다. 따라서 위와 같은 경우 아래처럼 바꿔주어야 한다.
public static String getDescription(String name) { //name에 해당하는 description을 가져오기 위한 구문
for (Test test : Test.values()) {
if (test.name.equals(name)) return test.description;
}
return null;
}
앞부분에 null이 들어오지 않는다고 보장된 enum type을 위치하고 이와 매개변수를 비교하는 것이다. enum이 아니더라도 equals 비교 메소드의 앞부분에 null이 들어올 가능성이 있는 String 객체는 위치시키지 않는 것이 좋다.
반응형
'Study > Java' 카테고리의 다른 글
SpringOne Platform 2018 발표 동영상 (0) | 2018.10.06 |
---|---|
[Java]Apache Commons Chain (0) | 2010.03.28 |
[JAVA][basic] mvc의 분리와 wraper 클래스의 필요성 (0) | 2009.10.05 |
[JAVA][tip] Swing JFrame의 ActionListener와 KeyListener의 처리와 통합 (0) | 2009.10.01 |
[Java][tip] springframework + swing에서 setSize를 applicationContext에서 선언하기 (0) | 2009.09.30 |
[java][springframework] Multi PropertyPlaceholderConfigurer 설정 (0) | 2009.09.19 |
[JAVA][basic] log4j 설정 (0) | 2009.08.07 |
[JAVA][tip] 자바 관련 유용한 즐겨찾기 모음 (0) | 2009.07.09 |
[Java][basic] 객체 생성, 상속, 형변환에 대한 예제 (0) | 2009.07.03 |
[JAVA][ibatis][tip] ibatis 공식 사이트 문서 (0) | 2009.05.07 |