2009-11-25 8 views
12

さんが言ってみましょう私はでき文のセット:Java:試し続けようか?

try { 
    String a = getProperty("a"); 
    String b = getProperty("b"); 
    String c = getProperty("c"); 
} catch(Exception e) { 

} 

今、プロパティbが見つかりませんでしたと言うことができますし、関数が例外をスローします。この場合、どのプロパティをtry-catchブロックで記述しなくても、どうやってbをnullに設定すればいいですか?つまり、a、b、cが存在しますが、まったく例外がスローされないことがあります。

答えて

19

プロパティが見つからないときにnullを返すように関数を変更することはできないと仮定すると、あなた自身がtry catchブロック内のすべてをラップしているように見えます。特に可能なすべての値

これらの多くのプロパティを取得する場合は、ヘルパーメソッドを使用して、次のように使用するときれいになります。

String getPropertySafely(String key) { 
    try { 
     return getProperty(key); 
    } catch (Exception e) { 
     return null; 
    } 
} 
+0

これは非常に興味深いようです!ありがとう – Legend

+1

ジャカルタコモンズIO(IOUtilsクラスのcloseQuietlyメソッド)でその命名規則を使用しているからといって、 "getPropertyQuietly"という名前になります。 –

+4

+1ラビ - 私の大ペットペットは例外を飲み込んでいます。あなたがそうするつもりなら、少なくとも方法の名前に基づいて明らかにしてください。 (Clean Code) – Elliot

7

各ステートメントの周りにtry-catchを配置する必要があります。続行はありません(VBのON ERROR ... RESUMEブロックにあるように)。代わりに:

あなたが書くことができ
String a = null; 
try { 
    a = getProperty("a"); 
} catch(Exception e) { 
    ... 
} 
String b = null; 
try { 
    b = getProperty("b"); 
} catch(Exception e) { 
    ... 
} 
String c = null; 
try { 
    c = getProperty("c"); 
} catch(Exception e) { 
    ... 
} 

個人的に
public String getPropertyNoException(String name) { 
    try { 
    return getProperty(name); 
    } catch (Exception e) { 
    return null; 
    } 
} 

私はgetProperty()はあなたが同じを使用しているので、すべてのこの余分な定型が

+1

ああ...もっと簡単なアプローチを使って私が逃げることができると思った。 – Legend

+1

ええと...そのgetPropertyは別のライブラリから来て、私は実際にその部分に触れたくなかった。 – Legend

5

を必要なだけのために例外を投げるための貧弱な候補であると思いますあなたがこれをループに入れることができるようになるたびに、以下のように機能します:

String[] abc = new String[3]; 
String[] param = {"a", "b", "c"}; 
for (int i = 0; i < 3; i++) { 
    try { 
     abc[i] = getProperty(param[i]); 
    } catch(Exception e) { 

    } 
} 

ですが、これはむしろ工夫されており、多数のプロパティにのみ役立ちます。私はあなたが3 try-catchを簡単に書く必要があると思う。

3

getPropertyの処理方法を再考する必要があります。それを行うためのプレーンな方法ではありません。

finally文を悪用できますが、依然としてすべての呼び出しでtry-catchが必要です。

関連する問題