2014-01-18 37 views
3

我是Java 8(Lambda Expression)的新手。以下代码将打印由变量“file”指示的路径上的所有目录。Java 8方法表达式给出编译错误

File file = new File("/vssexclude/Test/workspace/Test"); 

File[] names = file.listFiles(fileName -> fileName.isDirectory()); 

for (File name : names) { 
    System.out.println(name.toString()); 
} 

但是,当我尝试替换方法表达lambda表达式,日食是给编译错误:

File[] names = file.listFiles(File::isDirectory()); 

我缺少什么?

+2

我还会补充一点,虽然功能可能相同,但您应该真正从Java 7开始使用新的'Path'类而不是'File'。大多数情况下它的工作原理是相同的,但它更适合目录探测,名称连接,硬链接和软链接等。请参见['Files.newDirectoryStream()'](http://docs.oracle.com/javase/7/docs /api/java/nio/file/Files.html#newDirectoryStream%28java.nio.file.Path,%20java.nio.file.DirectoryStream.Filter%29)。 –

+0

谢谢,让我试试看。 –

回答

6

删除括号:当你想指特定类型的对象的实例方法

File[] names = file.listFiles(File::isDirectory); 

,要使用的语法是:

ContainingType::methodName 

这更被描述详情here

+0

哈哈哈!感谢你的回答。犯了一个像孩子一样的错误。 :-) –

+0

我也检查了Java文档,但不知何故错过了括号。 –