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>>的一个实例了啊?
天蓬老师2017-04-17 17:55:33
これはインターフェースのインスタンスではなく、インターフェースを実装する匿名内部クラスのインスタンスです。
その後の中括弧に気づきませんでしたか?私たちが普段使っているA a=new A()
の形式とは明らかに違います。
内部クラスに関する関連知識を読むことをお勧めします。
黄舟2017-04-17 17:55:33
これは、匿名の内部クラスを作成する方法です。実際、この作成方法は、新しいクラスを作成してインターフェイスを実装することと同じです。
問題は、インターフェイスのメソッドを実装するためだけに新しいクラスを作成するのは面倒すぎるため、ほとんどのメソッド作成では匿名の内部クラスを直接作成することになります。
クラスの名前には注意を払わないので、その特定の実装のみに注意を払います。これは、匿名内部クラスの一般的な使用シナリオでもあります。