gpt4 book ai didi

java - listFiles 的方法引用

转载 作者:行者123 更新时间:2023-12-03 11:19:28 34 4
gpt4 key购买 nike

我曾经从一本关于方法引用的书中读到以下代码。

File[] hiddenFiles = new File(".").listFiles(File::isHidden)
当我从文件 API 查找 listFiles 时方法,我看到它只有以下方法:
listFiles(FileFilter filter)

listFiles(FilenameFilter filter)
我已经尝试过代码并且它有效。但是虽然 API 声明它接受 FileFilterFilenameFilter ,为什么代码可以工作?
我对 File::isHidden 的理解是它等价于以下 lambdas:
(File file) -> file.isHidden()
但在 FileFilter 中,需要指定的方法如下。
boolean accept(File pathname)
那么不应该在那里定义一个名为 accept 的方法,例如:
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
或者编译器可以以某种方式自动检测模式并将代码视为 FileFilter,尽管未定义方法“accept”并且未创建 FileFilter 对象?

最佳答案

这个问题实际上有几个有趣的部分:

  • 问:什么是isHidden ,为什么它是 File.listFiles() 的允许参数?

    https://www.geeksforgeeks.org/file-ishidden-method-in-java-with-examples

    The isHidden() function is a part of File class in Java . Thisfunction determines whether the is a file or Directory denoted by theabstract filename is Hidden or not.The function returns true if theabstract file path is Hidden else return false.


  • 问:什么是File::isHidden句法?
    “双冒号”是 method reference .它是 Java 8 及更高版本的新功能。
  • 问:那么为什么 isHidden() 是可接受的 FileFilter 参数?

    https://docs.oracle.com/javase/8/docs/api/java/io/FileFilter.html

    This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

    File::isHidden是一个返回“真”或“假”的 lambda 表达式。
  • 关于java - listFiles 的方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64408835/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com