8

List二重中括弧を使用してa を宣言および初期化できることはわかっています。

// (1)
List<Object> myList = new ArrayList<object>(){{
    add("Object1");
    add("Object2");
}};

しかし、私はのがList欲しい<Map<Object,Object>>

// (2)
List<Map<Object,Object>> myList = new ArrayList<Map<Object,Object>>();

ネストされたコレクションで二重ブレースの初期化 ((1) を参照) を使用するにはどうすればよいですか? 私の目標は、データ構造を 1 行で宣言して初期化することです。

また、二重ブレースの初期化を使用する際に注意が必要な特定の欠点があるかどうかを知りたいです。

4

2 に答える 2

10

a) 同僚を驚かせ、読みにくくする、b) パフォーマンスを損なう、c) オブジェクトの等価性に関する問題を引き起こす可能性があるため、二重ブレースの初期化は避けてください (作成された各オブジェクトには一意のクラス オブジェクトがあります)。

コード スタイル ガイドに取り組んでいる場合、この種のトリッキーは禁止セクションに属します

リストとマップをインラインで作成できるようにしたい場合は、いくつかのファクトリ メソッドを作成してください。次のようになります。

List l = Lists.of(
    Maps.of(new Entry("foo", "bar"), new Entry("bar", "baz")),
    Maps.of(new Entry("baz", "foobar"))
);

ただし、Vangs の例は、例の構文が二重ブレースの初期化にどのように使用されるかを正確に示しています。

于 2015-02-09T13:09:59.683 に答える