2015-11-12 26 views
4

方法参考我对FileFilter下面的代码:用于Java的的FileFilter 8

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() 

我该怎么改变我获取方法引用的代码工作?

回答

6

您需要使用

final FileFilter directoryFilter = File::isDirectory; 

method reference是完全一样的lambda表达式pathname -> pathname.isDirectory()你写。

带有语法ContainingType::methodName的方法引用用于引用ContainingType类型的任意对象的实例方法。

方法参考test::isDirectory实际上是指特定test实例上的实例方法isDirectory(不适用于任意File实例)。