39

Mapインスタンスにキーが存在するかどうかを確認するために、次のコードを使用しています。

if (!map_instance.containsKey(key))
    throw new RuntimeException("Specified key doesn't exist in map");
else
   return map_instance.get(key);

私の質問は:

Map次のような、上記のコードを簡素化するためのユーティリティまたは実装はありますか。

custom_map.get(key,"Specified key doesn't exist in map");

私の目標はkey、マップに存在しない場合、マップの実装は渡された文字列で例外をスローすることです。

私の欲求が合理的かどうかわかりませんか?

(間違った用語や文法を使用していたら申し訳ありません。私はまだ英語を学んでいます。)

4

6 に答える 6

7

Apache commons から構成マップを調べることができます。は実装していませんが、、Mapなどのいくつかのヘルパー メソッドを備えた同様のインターフェイスを備えています。getStringgetStringArraygetShort

この実装では、メソッドsetThrowExceptionOnMissing(boolean throwExceptionOnMissing)を使用して、それをキャッチして、必要に応じて処理できます。

get正確には構成可能なメッセージではありませんが、例外タイプ自体はメソッドが呼び出されるコンテキストに依存するため、カスタムメッセージだけで固定例外をスローするのは意味がありません。たとえば、ユーザーの取得を実行した場合、例外はそれに関連するものであり、メッセージUserNotFoundExceptionだけでなく、RuntimeExceptionユーザーがマップに見つかりません!

于 2012-07-08T14:07:28.917 に答える
2

このようなメソッドは、Javaのマップには存在しません。tryGetもちろん、Mapクラスを拡張するか、マップとメソッドを含むラッパークラスを作成することで作成できます。

ただし、C#にはそのような方法があります。Directory.TryGetValue()

public class MyMap {
    public Map<Object, Object> map = new HashMap<Object, Object>();

    public Object tryGet(Object key, String msg) {
        if(!map.containsKey(key))
           throw new IllegalArgumentException(msg);
        return map.get(key); 
   }
于 2012-07-08T14:00:20.077 に答える
0

あなたがそれをしている方法は行く方法です。

補足として、常に true を返すため、コードはあまり意味がありません。

return map_instance.get(key);
于 2012-07-08T13:58:10.673 に答える