sea*_*sea 5 java lambda java-8
我曾经从一本关于方法引用的书中读到以下代码。
File[] hiddenFiles = new File(".").listFiles(File::isHidden)
Run Code Online (Sandbox Code Playgroud)
当我从 File API 查找该listFiles方法时,我看到它只有以下方法:
listFiles(FileFilter filter)
listFiles(FilenameFilter filter)
Run Code Online (Sandbox Code Playgroud)
我已经尝试过代码并且它有效。但是,虽然 API 声明它接受FileFilter或FilenameFilter,但为什么代码可以工作?
我对 File::isHidden 的理解是它等价于以下 lambdas:
(File file) -> file.isHidden()
Run Code Online (Sandbox Code Playgroud)
但在 FileFilter 中,需要指定的方法如下。
boolean accept(File pathname)
Run Code Online (Sandbox Code Playgroud)
那么不应该在那里定义一个名为 accept 的方法,例如:
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
Run Code Online (Sandbox Code Playgroud)
或者编译器可以以某种方式自动检测模式并将代码视为 FileFilter,尽管未定义方法“accept”并且未创建 FileFilter 对象?
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |