2017-01-03 23 views
-1

私はこの簡単な関数を書いた:Java - 引数で渡されたnull値を処理する方法は?

private String getOperatorForCardinality(String op) 
{ 
    String operator =""; 
    if(op!=null) 
    { 
     if(op.equals(">=")) 
     { 
      operator = ">="; 
     } 
     else if (op.equals("<=")) 
     { 
      operator = "<="; 
     } 
    } 
    else 
    { 
     operator = "empty"; 
    } 

    return operator; 
} 

文字列を返します。

この関数を呼び出すメインプログラムでは、引数がnullの場合、コンパイラはNullPointerExceptionのエラーを表示します。 理由ははっきりしていますが、引数を渡すとnull値を処理する方法がわかりません。

+0

'' null'の安全な文字列の比較を使用したい場合があります: '' string_literal '' .equals(string_variable); ' –

+0

もう一つのオプションは' null'をパラメータとして渡すことを許さないことです。例外は呼び出しコードの間違いです。 – 4castle

+0

例外をスローすることは**正しい動作です**。それはあなたのデザインと期待にかかっています。 –

答えて

0

これは、nullポインタ例外をスローすることはできません

if (op==null) 
operator = "empty"; 
1

トライ反対:

private String getOperatorForCardinality(String op) 
{ 
    String operator = ""; 
    if(">=".equals(op)) 
    { 
     operator = ">="; 
    } 
    else if ("<=".equals(op)) 
    { 
     operator = "<="; 
    } else { 
     operator = "empty"; 
    } 

    return operator; 
} 
4

それはあなたがNPEをスローするように掲載のコードのために不可能です。エラーは別の場所にあるか、またはあなたが思っているコードを実行していない(つまり、再コンパイルしていないなど)。

private static List<String> OPS = Arrays.asList("<=", ">="); // can add more valid ops 

private static String getOperatorForCardinality(String op) { 
    if (op == null) 
     return "empty"; 
    return OPS.contains(op) ? op : ""; 
} 

それとも、ネストされた三元系を気にしない場合:

private static String getOperatorForCardinality(String op) { 
    return OPS.contains(op) ? op : op == null ? "empty" : ""; 
} 

少ないコードは、通常は明確コードであり、かつにはあまり場所を残して、あなたの方法をに簡素化することができる、と述べた

バグが潜んでいる。

+0

このコードは同じことをしていません。 OPのコードは、 "> ="または "<="でないヌル以外の引数については ""を返します。 – Sentry

+1

@Sentry。私はそれに応じてコードを強化しました。 – Bohemian

+0

Thx。私のOCDが蹴られました;) – Sentry

2

それは防御的プログラミングと呼ばれ、あなたが何か行う必要があります。

private String getOperatorForCardinality(String op) { 
    if(null == op) { 
     //return null; 
     //throw new NullPointerException("..."); 
    } 
    .... 
} 

をあなたの方法は、反応パラメータがnullの場合はnullを返す必要があるか、例外をスローする必要がありますどのように考えるべきか。一般的に、パラメータが決してnullにならないようにして、常にチェックして行動を取らなければなりません。

関連する問題