我有下面的FileFilter代码
final FileFilter directoryFilter = new FileFilter()
@Override
public boolean accept(final File pathname)
{
return pathname.isDirectory();
}
};我想用一个方法引用来写这个。这是我第一次尝试:
final File test;
final FileFilter directoryFilter = test::isDirectory;这给了我一个错误:
不兼容类型:无效的方法引用。
如果我使用lambda表达式尝试这样的方法,它就会工作,比如:
final FileFilter directoryFilter = pathname -> pathname.isDirectory()如何更改代码才能使方法引用正常工作?
发布于 2015-11-12 15:59:21
你需要用
final FileFilter directoryFilter = File::isDirectory;这个method reference与您编写的lambda表达式pathname -> pathname.isDirectory()完全相同。
使用语法ContainingType::methodName的方法引用ContainingType类型的任意对象的实例方法。
方法引用test::isDirectory实际上会引用特定test实例上的实例方法isDirectory (而不是针对任意File实例)。
https://stackoverflow.com/questions/33675681
复制相似问题