1

私はJava espにかなり慣れていません。いくつかのコーディング慣行に。メソッドが a をスローしNullPointerException、呼び出し元のメソッドがそれをキャッチする状況があります。

try {
    String test = Class.method(arg)
}    
catch (Exception ex) {
    ...
}

public String method(arg){
String str;
...
if(str == null) throw(exception)
return str;
}

内部のいくつかのメソッドClass.method(arg)が a をスローNullPointerExceptionし、上記の catch でキャッチされます (上記のように)。代わりに、次のようなことをしたい:

if (test == null) { do something else }

try ブロック内。

これを処理する最善の方法は何ですか? メソッド内のスローを削除して、null を返すようにすることはできますか?

4

4 に答える 4

3

ヌル ポインター例外を予期すると、悪臭がします。null テストを追加しmethodて、例外を待たずに合意した結果を返すことはできないでしょうか?

だから代わりに

 public String method(String arg) {
   try {
     return arg.toString();
   } catch (NullPointerException npe) {
     return null;
   }
 }

あなたは本当にすべきです

 public String method(String arg) {
   if (arg == null) {
     return null;
   }

   return arg.toString();
 }

かなりの代替手段は、NPE 以外の例外をスローして問題のヒントを与えることnullです。通常、戻ることは悪い考えであるためです。

 public String method(String arg) {
   if (arg == null) {
     throw new IllegalArgumentException("Passing null is illegal");
   }

   return arg.toString();
 }
于 2013-01-09T22:41:48.307 に答える
3

例外をキャッチして、例外が発生した場合method(arg)に返す必要nullがあります。

サンプル プログラム:

public class Test1 {

    public static void main(String[] args) {
        try{
            String test = method("1");
            if(test==null){
                //do something else
            }
        }catch(Exception e){

        }

    }

    private static String method(String str) throws Exception{
            if(str.equals("1")) return null;
            else if(str.equals("2")) throw new Exception("My Exception");
            else return str;          
    }

}

メソッドを次のように変更できるようになりましたが、それはすべて要件によって異なります。

    private static String method(String str) throws Exception{
        try{
            if(str.equals("1")) return null;
            else if(str.equals("2")) throw new Exception("My Exception");
            else return str;
        }catch(Exception e){
            return null;
        }

    }
于 2013-01-09T22:36:40.437 に答える
0

NullPointerException特に次のように catch 句を指定できます。

try {
    String test = Class.method(arg)
}
catch (NullPointerException ex) {
    // test == null
    // do something
}
catch (Exception ex) {
    // ?
}

catchただし、句にロジック/動作を入れすぎたくない場合があるためif、提案したようなブロックをtry-catchブロックの外に配置することを検討してください。

try {
    String test = Class.method(arg)
}
catch (NullPointerException ex) {
    // At least log the exception; never swallow exceptions. NEVER.
    System.out.println(ex);
}
catch (Exception ex) {
    // ?
}
if(test != null) {
    // do something
}
else {
    // do something else
 }
于 2013-01-09T22:41:11.520 に答える
0
try{
    Class.method(arg);
} catch ( NullPointerException npe ) {
    //do something else
}
于 2013-01-09T22:39:55.330 に答える