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






