2017-12-14 8 views
-2

は、私は私のメソッドを宣言することができますメソッド本体内のコードがクラッシュする可能性がある場合、私は、このメソッド内でNullPointerExceptionのためにコードがクラッシュする可能性があるため、NullPointerException、throwを使用できますか?

編集a.getB().getC()のようなコードを持っているので、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

これら2つのページ - [よくある質問](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

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

return opt.orElseThrow(NullPointerException::new); 

} 

オプションのメソッドは、オブジェクトCを返しますが、オブジェクトがnullの場合は、EXC

0

あなたはいけないNULLポインタがスローされます。

この場合、この場合はビジネスルールを確認して適用する必要があります。それ以外の場合は、パラメータがnullである必要があり、次にIllegalArgumentExceptionを投げる必要があるかどうかを確認することをお勧めします。たとえば、Javadocでこの動作を記述することができます。しかし、method throwsを宣言するのは役に立たない。

関連する問題