java - FileFilter Java 8 的方法引用

标签 java lambda java-8 method-reference

我有以下 FileFilter 代码:

final FileFilter directoryFilter = new FileFilter()
    @Override
    public boolean accept(final File pathname)
    {
        return pathname.isDirectory();
    }
};

我想用方法引用来写这个。这是我的第一次尝试:

final File test;
final FileFilter directoryFilter = test::isDirectory;

这给了我一个错误:

incompatible Types: invalid method reference.

如果我用像这样的 lambda 表达式尝试这个,它会起作用:

final FileFilter directoryFilter = pathname -> pathname.isDirectory()

我必须如何更改我的代码才能使方法引用起作用?

最佳答案

你需要使用

final FileFilter directoryFilter = File::isDirectory;

method reference与您编写的 lambda 表达式 pathname -> pathname.isDirectory() 完全相同。

具有语法 ContainingType::methodName 的方法引用用于引用 ContainingType 类型的任意对象的实例方法。

方法引用 test::isDirectory 实际上会引用特定 test 实例上的实例方法 isDirectory(不是任意的 文件实例)。

关于java - FileFilter Java 8 的方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33675681/

相关文章:

c++ - 为什么 Vector 被用作 Priority Queue 的第二个参数?

Linq RemoveFirst 等效项

java - 如何使用 Java 8 Stream/Lambda 计算整数中尾随零的数量?

java - HttpURLConnection GET 请求得到 400 Bad Request

java - 如何检测 HttpServletRequest 的 TLS 版本?

java - MPAndroidchart mChart 在 onCreate 和 onResume 之间设置为 null

java - 在 java-8 lambda 表达式中使用 if-else 语句

如果流不返回任何结果,Java 8 将抛出异常

g++ - 当涉及到 lambda 函数的指针时,g++ 4.5.3 是否损坏?

Java 8 消费者/函数 Lambda 歧义