2017-12-14 18 views
-2

나는 내 방법을 선언 할 수는 메서드 본문 코드 나는이 방법 안에 a.getB().getC()과 같은 코드를 가지고 있기 때문에 NullPointerException 때문에 "예상"코드가 중단 될 수 있으므로 NullPointerException, throw를 사용할 수 있습니까?

NullPointerException이

의 중단 될 때 발생합니다

편집 : 내가 가지고있는

Catching nullpointerexception in Java

샘플 코드로 시도했습니다.

class B { 
    public void methodB() {} 
} 

class A { 
    public void methodA(B b) throws NullPointerException { 
     b.methodB(); 
    } 
} 

@Test 
public void test_null_pointer() { 
    boolean thrown1 = false; 
    boolean thrown2 = false; 
    A a = new A(); 

    try { 
     B b = new B(); 
     a.methodA(b); 
    } catch (NullPointerException n) { 
     thrown1 = true; 
    } 

    try { 
     a.methodA(null); 
    } catch (NullPointerException n) { 
     thrown2 = true; 
    } 

    assertFalse(thrown1); 
    assertTrue(thrown2); 
} 

테스트가 완료되었습니다.

+2

시도해 보셨습니까? –

+0

대답을 사용할 수 있습니까 – Bhargav

+5

이 두 페이지 - [좋은 질문하기] (https://stackoverflow.com/help/how-to-ask) 및 [최소, 및 확인 가능한 예] (https://stackoverflow.com/help/mcve) – vinS

답변

1

예외가 발생합니까?

public static boolean getC() throws Exception{ 
    if(Some Condition) 
     throw new Exception("Some Error"); 
    else 
     return true; 
} 

또는


이 할 경우

public static boolean getC() throws Exception{ 
    try{ 
     ... Do Something ... 
     return true; 
    }catch(Exception e){ 
     throw e 
    } 
} 

,이 방법은 다시 예외를 던질 때 예외를 잡을 수 있습니다.

public static void main(String args[]){ 
    try{ 
     boolean isOK = getC(); 
    }catch(Exception e){ 
     System.out.println(e.getMessage()); 
    } 
} 
1

당신은 오브젝트 C를 반환합니다 옵션

public YourObjectC getC(){ 
YOurObjectA a = new YourObjectA(); 
Optional<YourObjectC> opt = Optional.ofNullable(a) 
            .map(YOurObjectA::getB) 
            .map(YourObjectB::getC); 

return opt.orElseThrow(NullPointerException::new); 

} 

방법을 사용할 수 있지만 객체가 널 포인터가 발생합니다 null의 경우 EXC

0

당신은 안된다.

null 일 수있는 경우이 경우 비즈니스 규칙을 확인하고 적용해야합니다. 그렇지 않으면 매개 변수가 null이어야하고 IllegalArgumentException을 던져야하는지 확인하는 것이 좋습니다. 예를 들어 Javadoc에서이 동작을 설명 할 수 있습니다. 하지만 method throws을 선언하는 것은 쓸모가 없습니다.