我有以下 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/