2017-01-28 11 views
-3

は今の私の解決策は、次のようになります。メソッドにキャッチしようとした後に、より良い解決策がありますか?

public void method() { 
    int number; 
    boolean continue = true; 
    try { 
    number = parseInt(this.something); 
    } catch (NumberFormatException e) { 
    //some code 
    continue = false; 
    } 

    if (continue) { 
    //more code 
    } 
} 

はきれいに何かがそこにありますか?

+3

'return'を使用していますか? – Aidin

+1

Java BTWで予約語が '続行されていませんか? –

+0

しかし、このコードサンプルだけでは、間違った質問をしているようです。早期に 'this.something'を整数にすることを検証していたなら、まずはこの問題はありません。ほとんどの場合、コードに不必要な複雑さを導入しないように、早く失敗する必要があります。 –

答えて

2

メソッドにキャッチした後に続けるためのより良い解決策がありますか?

意図した方法は、tryブロック内でスキップするコードを記述することです:

public void method() { 
    try { 
    int number; 
    number = parseInt(this.something); 
    //more code 
    } catch (NumberFormatException e) { 
    // log exception 
    // do things to recover from the error if possible 
    // maybe rethrow `e` or throw another exception 
    } 
    // avoid to write some code here, usually it is wrong. 
} 
2

voidメソッドであっても、return;を使用してメソッドを終了できます。したがって、あなたの「問題」に完全に罰金ソリューションは、次のようにちょうどreturnを使用してifを削除することです:

public void method() { 
    int number; 
    try { 
     number = parseInt(this.something); 
    } catch (NumberFormatException e) { 
     //some code 
     return; 
    } 
    //more code 
} 
1

オブジェクトが(this.somethingが設定されていない)適切に設定されていない場合、それはに良いかもしれません呼び出しコードをスローしてキャッチします。あなたが戻ってきたら、呼び出し側はメソッドが正常に完了したとみなします。さもなければAidinによって提供されたコードが動作します。

+1

'// some code'は依然として適切な値を割り当てることができ、オブジェクトのフィールドは良い状態です。しかし、間違いなく何か気にするもの。 – Andreas

-1

retunを使用できます。ブレーク;または可能であればSystem.exit()

+4

'method()'の呼び出し側は他の処理をしたいので、 'break'をそこで使うことはできず、' System.exit() 'を使うのは本当に悪いです。 – Andreas

0

あなたは単に例外を無視し、情報の目的のために例外をログに記録することができます

public void method() { 

    int number; 

    try { 
     number = parseInt(this.something); 
    } catch (Exception ignored) { 
     // here could be some System.out.println or a logging API 
    } 
} 

しかし、あなたが帰ってきたら、ただnullを返し、あなたの結果がnullかどうかを評価してください。

public Integer method() { 

    try { 
     return parseInt(this.something); 
    } catch (Exception ignored) { 
     // here could be some System.out.println or a logging API 
    } 

    return null; 
} 

Integer number = method(); 
if (number != null) {.... 
関連する問題