0

誰かがこのJava構文を私に説明できますか?外側の括弧の内側でそれらのブラケットは何をしていますか?

addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
4

4 に答える 4

6

これは匿名内部クラスと呼ばれます。これは、拡張する名前のないクラスを作成しWindowAdapter(インターフェースを指定することも可能であり、その場合、クラスはそのインターフェースを実装します)、そのクラスの1つのインスタンスを作成します。括弧内には、すべての抽象メソッドまたはすべてのインターフェースメソッドを実装する必要があり、メソッドをオーバーライドすることもできます。

于 2011-02-27T05:57:02.887 に答える
2

これは匿名の内部クラスです。括弧はクラス宣言の開始と終了を示します。これは潜在的に有用なSOの質問であり、他にもたくさんあります

于 2011-02-27T05:55:23.780 に答える
2

そして、andersojの答えを補完するために、通常、メソッドがXのインスタンスを期待するときにそれらを使用しますが、Xは抽象クラスまたはインターフェースです。

ここでは、実際にWindowAdapterから派生クラスを作成し、特定のタスクを実行するためにメソッドの1つをオーバーライドしています。

この構文は、イベントハンドラー/リスナーで非常に一般的です。

于 2011-02-27T06:03:50.883 に答える
1

匿名の内部クラスです。これは単なるショートカットです。トップレベルのクラスとしてコードを作成する必要がある場合、コードがどのように見えるかを想像できます。

class CloseApplicationWindowAdapter extends WindowAdapter {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

次に、コード内で次のことを行います。

CloseApplicationWindowAdapter adapter =  new CloseApplicationWindowAdapter();
addWindowListener(adapter);

どちらのソリューションもまったく同じ効果があります(たとえば、匿名クラスはClass$1.classファイルを作成します)。匿名クラスが大きくなりすぎたり、複雑になったり、重要になったりしない場合、Javaプログラマーは匿名クラスのアプローチを好むことがよくあります。

于 2013-02-13T18:25:37.827 に答える