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