FileFilter 的方法参考 Java 8

Method reference for FileFilter Java 8

我有以下 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 实例(不是任意 File 实例)上的实例方法 isDirectory