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
這是匿名內部類別的一種寫法,實際上這種寫法等同於你新寫一個class,然後implements這個介面。
問題是,單單為實作介面的一個方法而新建一個class,未免太小題大做,因此大多數的寫法會直接寫一個匿名的內部類別。
因為我們並不關注類別的名字,我們只關注它的具體實現,這也是匿名內部類別的常見使用場景。