2015-10-16 46 views
2

這些代碼行爲什麼我可以通過命令行編譯此代碼,但不能與Eclipse?通過命令行使用<code>javac</code>時

System.out.println(
     Stream.of("adam", "bob", "adrian", "brian") 
     .collect(
       Collectors.groupingBy(
         x -> x.substring(0,1),  //1 
         Collectors.joining("-"))) 
    ); 

編譯很好,但是當我嘗試在Eclipse編譯我得到這個錯誤

方法SUBSTRING(INT,INT)是未定義的對於類型CharSequence

Eclipse如何幹擾編譯器?不是IDE只使用javac.exe

我使用Eclipse 4.4.1月神與Oracle jdk1.8.0_45

+2

在Eclipse Mars 4.5.1中適用於我。只需升級。 –

+10

您的Eclipse項目是否可能使用不同版本的Java進行編譯? – brimborium

+7

[javac和Eclipse編譯器有什麼不同?](http://stackoverflow.com/questions/3061654/what-is-the-difference-between-javac-and-the-eclipse-compiler) – MPirious

回答

4

你應該確保這不是一個語法錯誤首位。 更改您的代碼看起來像這樣:

x -> ((String) x).substring(0,1) 

除了確保你使用Eclipse的Java的完全兼容8版本,你應該檢查,如果你讓Eclipse中使用Java 8語言特性。

enter image description here

enter image description here

如果沒有指定JRE的正確版本,你可以改變它像描述如下:How to change JDK version for an Eclipse project

+0

已經檢查過,JRE是正確的。在這一點上,不應該認爲這是一個錯誤? –

+1

只要您確定這不適用於全新安裝的Eclipse,並且您的代碼不包含任何錯誤。我必須改變你的代碼到'x - >((String)x).substring(0,1)'爲了使它在我的STS上運行3.7.1 – Marged

+0

就是這樣!你不需要任何修改就可以用Oracle javac.exe成功編譯它 –

1

該問題已經在Eclipse中被解析爲4.5里程碑3 ,最有可能通過bug 437444。這個改變結合了在Java 8發佈之後對incorporating several JLS changes進行的一些錯誤修正。

我們可以討論在示例更改之前示例是否實際上是合法的Java 8(以前推斷不允許使用來自嵌套lambda體的某些信息),但我希望更新到Eclipse 4.5.1會讓每個人都高興。

相關問題