2012-03-30 9 views
2

何らかの価値があることが保証されているコンテンツがあるとします。あなたの仕事は何かが与えられたらそれを見つけることですlikeそれです。nullを返すことを心配することなく、Beanからコンテンツを取得していますか?

これは動作します:

public KVPair getKvpForKey(String keyValue) { 
    KVPair kvpInThisContent = null; 

    for (KVPair kvp : kvContent) { 
     if (kvp.getKey().getAsFound().equals(keyValue)) { 
      kvpInThisContent = kvp; 
      break; 
     } 
    } 

    return kvpInThisContent; 
} 

をこれも動作します:

public KVPair getKvpForKey(String keyValue) { 

    for (KVPair kvp : kvContent) { 
     if (kvp.getKey().getAsFound().equals(keyValue)) 
      return kvp; 
    } 

    return null; 
} 

しかし...両方は、いくつかのケースでnullが返されることがありますことを...可能性を想定しています。これは可能です(コンテンツはそこにあります!)。

nullについて心配することなくクリーナーを行う方法はありますか?

+2

アルゴリズムがループを通過することがないと確信している場合は、 'null'を返すか、例外をスローするか' assert false'を返すことができます。 –

+0

右。それを避ける方法はありませんか?この条件は基本的に不可能で、決して起こりません。 nullまたは例外の両方が無駄に見える – JAM

+0

コンパイラに関する限り保証はありません;) –

答えて

3

コンパイラはあなたの不変量を知らないので、にはがあり、末尾にreturnというステートメントがあります。

assert false; 
return null; 

の追加ボーナスがあなたの仮定場合は、例外があなたの顔にスローされますということです:あなたは何ができるか、しかし、それを明確に、これは今までに実行するように意図されていないことを確認するためにassert false文を追加していますあなたは-eaでそれを実行します。

また、関数内でnullが返されないことを覚えておいてください。そうすることで、発信者は気にする必要がなくなり、追加のチェックを避けることができます。