我正在查看一个示例,该示例从与方法引用相关的当前目录中提取隐藏文件数组,如下所述
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)
)
在使用方法引用实现接受方法时,它如何有效地使用boolean isHidden()
in File
没有参数的类。我了解到,只有当参数与抽象方法匹配时,我们才能应用方法引用,但这里accept
方法有一个类型的参数File
but isHidden
没有参数。您能解释一下它如何有效吗?
它是 Lambda 表达式 + 方法引用。
你提到的accept方法是关于Lambda表达式的,你提到的关于File::isHidden
是方法参考。
它们是两个不同的东西。
- https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
- https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.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();
}
});
可以变成:(Lambda表达式)
File[] hiddenFiles = new File(".").listFiles(file -> file.isHidden());
那么就可以变成:(方法参考)
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)