次のコードでは、getEntriesNotWorking
メソッドはコンパイル時エラーを報告します。
public class DoubleBracketInitializerTest {
class Container {}
class Entry {
Container container;
public Entry(Container container) {
this.container = container;
}
}
class DetailedContainer extends Container {
List<Entry> getEntriesNotWorking() {
return new ArrayList<Entry>() {{
add(new Entry(this)); // compile-time error mentioned below
}};
}
List<Entry> getEntriesWorking() {
return Arrays.asList(new Entry(this));
}
}
}
エラー:
コンストラクタ DoubleBracketInitializerTest.Entry(new ArrayList(){}) は未定義です
getEntriesWorking()
メソッドが正しくコンパイルされている間。DetailedContailer
aは のサブクラスであるため、コンストラクターは明らかにそこにありContailer
ます。
コードを無効にするこれら2つの方法の違いは何ですか? このクラス階層で二重括弧初期化子を機能させるにはどうすればよいですか?