FileFilter Java 8的方法参考

Kev*_*vin 4 java lambda java-8 method-reference

我有以下代码FileFilter:

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

我想用方法参考写这个.这是我的第一次尝试:

final File test;
final FileFilter directoryFilter = test::isDirectory;
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误:

不兼容的类型:无效的方法引用.

如果我尝试使用lambda表达式,它可以工作:

final FileFilter directoryFilter = pathname -> pathname.isDirectory()
Run Code Online (Sandbox Code Playgroud)

我如何更改代码以使方法引用工作?

Tun*_*aki 6

你需要使用

final FileFilter directoryFilter = File::isDirectory;
Run Code Online (Sandbox Code Playgroud)

方法引用pathname -> pathname.isDirectory()您编写的lambda表达式完全相同.

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

方法引用test::isDirectory实际上将引用isDirectory特定test实例上的实例方法(不适用于任意File实例).