0

重複の可能性:
匿名 (内部) クラスは Java でどのように使用されますか?

Java Puzzlers を読んでいるときに、次の機能を発見しました。

public class Main {
    public static void main(String[] args) {
        new Object() {
            void helloWorld() {
                System.out.println("Hello world!");
            }
        }.helloWorld();
    }
}

そして、これは驚くほど便利だと思います。非常に閉鎖的です。問題は、この構成に関する情報が見つからないことです。この機能を説明するリンクを教えてもらえますか?

4

3 に答える 3

3

これは匿名内部クラスの例です。Java 1.1 以降でサポートされています。

これはクロージャーのように見えるかもしれませんが、実際には、真のクロージャーよりも少ない制限があります1 。ただし、これらの制限にもかかわらず、匿名の内部クラスは依然として非常に有用であり、軽量のコールバックを必要とする Swing や同様のフレームワークで広く使用されています。

参考文献:


1 - 匿名内部クラス (または名前付き内部クラス) が真のクロージャのように動作しない理由は、それを囲むスコープで変更可能なローカル変数を参照することが許可されていないためです。インスタンス変数またはfinalローカル変数を参照できますが、非finalローカル変数 (またはメソッド パラメーター変数) を指定するとコンパイル エラーが発生します。

于 2012-12-29T00:57:15.377 に答える
2
new Object() {
    void helloWorld() {
        System.out.println("Hello world!");
    }
}.helloWorld();

つまり、Object を拡張する匿名クラスのインスタンスを作成し、それに対してメソッド .helloWorld() を呼び出します。

于 2012-12-29T00:56:34.367 に答える
0

Java 仕様 15.9.5。匿名クラス宣言と 15.9.5.1。匿名コンストラクタ http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9.5

于 2012-12-29T01:00:18.960 に答える