interface - Java中接口不能被实例化,那么如下的代码怎么理解?
PHP中文网
PHP中文网 2017-04-17 17:53:33
0
4
432
    public static final Function<String, Set<String>> MAPPING_FUNCTION = new Function<String, Set<String>>() {
            @Override
            public Set<String> apply(String s) {
                return new HashSet<>();
            }
        };

MAPPING_FUNCTION已经是接口Function<String, Set<String>>的一个实例了啊?

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(4)
Peter_Zhu

これはインターフェースのインスタンスではなく、インターフェースを実装する匿名内部クラスのインスタンスです。
その後の中括弧に気づきませんでしたか?私たちが普段使っているA a=new A()の形式とは明らかに違います。
内部クラスに関する関連知識を読むことをお勧めします。

いいねを押す +0
黄舟

これは、匿名の内部クラスを作成する方法です。実際、この作成方法は、新しいクラスを作成してインターフェイスを実装することと同じです。
問題は、インターフェイスのメソッドを実装するためだけに新しいクラスを作成するのは面倒すぎるため、ほとんどのメソッド作成では匿名の内部クラスを直接作成することになります。

クラスの名前には注意を払わないので、その特定の実装のみに注意を払います。これは、匿名内部クラスの一般的な使用シナリオでもあります。

いいねを押す +0
Ty80

「Crazy Java 講義ノート」の第 6 章に詳しい説明があります。本を読みたくない場合は、「匿名内部クラス」で検索してください。

いいねを押す +0
刘奇

匿名内部クラスは、このインターフェースを実装するクラスと同等です。宣言と実装を一緒に書くだけです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート