2014-01-18 36 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文檔,但不知何故錯過了括號。 –