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)
我如何更改代码以使方法引用工作?
你需要使用
final FileFilter directoryFilter = File::isDirectory;
Run Code Online (Sandbox Code Playgroud)
此方法引用与pathname -> pathname.isDirectory()您编写的lambda表达式完全相同.
具有语法的方法引用ContainingType::methodName用于引用该ContainingType类型的任意对象的实例方法.
方法引用test::isDirectory实际上将引用isDirectory特定test实例上的实例方法(不适用于任意File实例).
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |