本文介紹了Java 8方法參考使用示例的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在執(zhí)行一個示例,該示例從與下面提到的方法引用相關(guān)的當前目錄中提取隱藏文件數(shù)組
使用匿名內(nèi)部類實現(xiàn)
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
使用方法引用實現(xiàn)
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
我的問題是FileFilter
接口只有一個抽象方法(boolean accept(File pathname)
)
使用方法引用實現(xiàn)Accept方法時,在沒有參數(shù)的File
類中使用boolean isHidden()
是否有效。我了解到只有當參數(shù)與抽象方法匹配時才能應(yīng)用方法引用,但這里的accept
方法有一個File
類型的參數(shù),但isHidden
沒有參數(shù)。您能解釋一下它是如何有效的嗎?
推薦答案
它是lambda表達式+方法引用。
您提到的Accept Method是關(guān)于Lambda表達式,您提到的File::isHidden
是方法引用。
它們是兩件不同的事情。
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
您的原件:
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
可以轉(zhuǎn)換為:(lamda表達式)
File[] hiddenFiles = new File(".").listFiles(file -> file.isHidden());
然后可以將其轉(zhuǎn)換為:(方法引用)
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
這篇關(guān)于Java 8方法參考使用示例的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,