2011-12-23 2 views
0

런타임 예외를 잡는 것이 매우 나쁜 디자인의 99 %에 있다는 것을 알고 있습니다.XML로 NullPointerException을 제어하십시오.

하지만 Java로 매핑 된 XML이 있고 마지막 노드가 존재하는지 테스트합니다. 예 :

XML : <A> <B> <C> <D>someValue</D> </C> </B> </A>

if(myObject.getA() != null && myObject.getA().getB() != null && 
     myObject.myObject.getA().getB().getC() && 
     myObject.myObject.getA().getB().getC().getD() != null){ 

      doSomeAction(myObject.myObject.getA().getB().getC().getD()); 

    } 

그것은 우리가 20 개 노드가 있다면 상상 ... 단지 유효한 null 가능한 많은 라인을 ...

는 XML 게터는 간단한 (매우 가벼운 것을 감안할 때 값이 반환) 그래서 우리가 대신 할 수없는 성능 이유로 정말, null이 될 수있는 민간 대표가 없습니다 : 당신의 의견은 무엇

try{ 
doSomeAction(myObject.myObject.getA().getB().getC().getD()); 
} 
catch(NullPointerException e){ 
throw new NullPointerException("D node doesn't exist , please check your XML", e); 
} 

s?

답변

2

XPath 또는 다른 형식 인 EL, 표현식 언어. 연결 호출을 사용하여 빌더 패턴 다음에 고유 한 표현식 클래스를 만들 수 있습니다.

3

당신은 널 객체 패턴의 변형 사용하기 위해 매핑 된 클래스 내 자식 개체를 초기화 할 수 있습니다 : getA().getB().getC().getD() 같은 연쇄 호출이 항상 성공 후

class A { 
    private B b = new B(); 
} 

을하지만 D 내용은 null 될 것입니다 .

당신은 적응할 수

/당신의 쓰임새이 최적화 가능성이 더미 초기화를위한 전용 인스턴스를 사용 : 표준 있지만 (

class A { 
    private B b = B.NULL_INSTANCE; 
} 

이가 널 객체 패턴의 더별로 - 책을 사용 것 구현에는 단순한 전용 인스턴스가 아닌 전용 클래스가 포함됩니다.

관련 문제