2

ライブラリの1つを調べていると、Javaで次の構造が見つかりました。これは私にとって本当に新しいものです。にクラスがあると仮定Pointjavaます。

class Point {
    int x;
    int y;
    public Point() {}
    public Point(int x, int y) {
    this.x = x;
    this.y = y;
    }
}

のインスタンスを作成するPointときに、変数を初期化xy、インスタンスの作成自体で次のようにします。

Point inst = new Point() {
            {
                this.x = 10;
                this.y = 20;
            }
        };

instance blockこれはJavaと関係がありますか、それとも何か違うのですか?

4

1 に答える 1

6

2番目の例:

  1. Pointから派生した匿名クラスを作成します
  2. イニシャライザブロックを使用して値を初期化します

構文:

new Object() { ... }

のように見えますObjectが、実際には。から派生した新しいオブジェクトを作成していますObject。次に、内側の中括弧が初期化ブロックを宣言します。

これは、コレクションを初期化するために時々使用される方法です。

new ArrayList<String>(){{
   add("1");
   add("2");
}};

注意すべきことの1つは、それが内部クラスであり、その結果、外部(周囲)クラスへの暗黙の参照があるということです。(たとえば)これをシリアル化するようにならない限り、通常は問題になりません。

于 2012-08-24T13:34:08.907 に答える