別の開発者から入手したコードを調べているときに、次のコードに出くわしました。
public void myMethod()
{
final MyClass data1 = new MyClass(1,2,3);
final MyClass data2 = new MyClass(4,5,6);
// [...]
final MyClass dataN = new MyClass(M,O,P);
ArrayList<MyClass> list = new ArrayList<MyClass>()
{
{
add(data1);
add(data2);
// [...]
add(dataN);
}
};
}
実際、私はこのコードが何をするか (list
定義されたデータを入力すること) を知っていると思いますが、結果がどのように達成されるかに驚いています。特に、その場合の中括弧が何を{}
意味するのか疑問に思っています。
私はこのコードがひどいことを知っています (考えますか?)。
私の推測は次のとおりです。
- の最初のペア
{}
は、匿名オブジェクトの作成です。これは にキャストされArrayList<MyClass>
ます。 - 2番目のペア
{}
は-私が考えている-静的初期化に似たものですが、オブジェクト用です。それはある種の匿名コンストラクタでしょうか?
誰かがここで私にいくつかの洞察を教えてもらえますか? (Java ドキュメントのどこでそのような「構文マジック」を見つけることができますか?)