8

を作成したい

public static final LinkedMap myMap;

どこかで、マップに似たものを見つけました:

 public class Test {
        private static final Map<Integer, String> MY_MAP = createMap();

        private static Map<Integer, String> createMap() {
            Map<Integer, String> result = new HashMap<Integer, String>();
            result.put(1, "one");
            result.put(2, "two");
            return Collections.unmodifiableMap(result);
        }
    }

しかし、「unmodifiableMap」メソッドをに適用することはできませんLinkedMap。誰でも私を助けることができますか?それはまったく可能ですか?

4

2 に答える 2

12

最も一般的な回避策は、ほぼ間違いなくGuava ImmutableMapです。(開示:私はGuavaに貢献しています。)

Map<Integer, String> map = ImmutableMap.of(
  1, "one",
  2, "two");

また

ImmutableMap<Integer, String> map = ImmutableMap
  .<Integer, String> builder()
  .put(1, "one")
  .put(2, "two")
  .build();

他のライブラリがなければ、あなたが書いたもの以外の唯一の回避策は

static final Map<Integer, String> CONSTANT_MAP;
static {
  Map<Integer, String> tmp = new LinkedHashMap<Integer, String>();
  tmp.put(1, "one");
  tmp.put(2, "two");
  CONSTANT_MAP = Collections.unmodifiableMap(tmp);
}
于 2012-05-16T08:08:27.233 に答える
0

関数 Create() と等しい変数を宣言しても意味がありません。

最終変数 myMap が必要な場合は、次のように記述する必要があります。

// = createMap();
private final static LinkedHashMap<Integer, String> 
                                          myMap = new LinkedHashMap<Integer, String>();
static {
    myMap.put(1, "one");
    myMap.put(2, "Two");
};

public static void main(String[] args) {

  for( String link : myMap.values()){
    System.out.println("Value in myMap: "+link);
  }

}

または、create() 関数を使用する場合は、myMap から final キーワードを取り除き、次のようにメインで myMap を使用する必要があります。

    public static void main(String[] args) {

    myMap = Test.createMap();
于 2013-03-07T15:33:39.777 に答える