2016-07-09 38 views
-4

我正在使用Spring教程構建REST服務https://spring.io/guides/tutorials/bookmarks/Java代碼中的未知語法

而且我被困在一個點上。在class Application,有這種怪異的一段代碼:

return (evt) -> Arrays.asList(
"jhoeller,dsyer,pwebb,ogierke,rwinch,mfisher,mpollack,jlong".split(",")) 
.forEach(
a -> { 
Account account = accountRepository.save(new Account(a, 
"password")); 
bookmarkRepository.save(new Bookmark(account, 
"http://bookmark.com/1/" + a, "A description")); 
bookmarkRepository.save(new Bookmark(account, 
"http://bookmark.com/2/" + a, "A description")); 
}); 

我嚴重不知道什麼在那裏發生。 evt來自哪裏,沒有相關的輸入。在運算符中,->是什麼?我從來沒有在Java中使用過這個操作符。首先有沒有運營商?

即使我的日食說了同樣的事情,

EVT不能被解析爲一個變量

似乎沒有人問類似的問題,互聯網上,我搜索了很多。我錯過了什麼嗎?

+3

這是Java 8語法(一種lambda表達式,即排序的匿名函數),根據您的描述,您似乎不熟悉Java 8.您可能仍在運行Java 7或更早版本。 –

+0

這看起來像Java 8中的Java lambda表示法。您可以看到本教程是否有Java 7版本,或者這裏是lambda表達式的oracles指南https://docs.oracle.com/javase/tutorial/java/javaOO/ lambdaexpressions.html – Gavin

+0

@ tobias_k好的,我明白了。感謝那些信息,以及evt。這是否也屬於新的語法定義。我的意思是,沒有定義標識符,我們可以像這樣使用它們嗎?任何鏈接? –

回答

4

這是Java 8語法(lambda表達式,即排序的匿名函數),根據您的描述,您似乎並不熟悉Java 8.您可能仍在運行Java 7或更早版本。您可以使用java -version命令檢查您的Java版本。

關於evt

new Consumer<Event>() { 
    @Override 
    public void accept(Event evt) { 
     for (String a: Arrays.asList("jhoeller,dsyer,pwebb,ogierke,rwinch,mfisher,mpollack,jlong".split(",")) { 
      Account account = accountRepository.save(new Account(a, 
        "password")); 
      bookmarkRepository.save(new Bookmark(account, 
        "http://bookmark.com/1/" + a, "A description")); 
      bookmarkRepository.save(new Bookmark(account, 
        "http://bookmark.com/2/" + a, "A description")); 
     } 
    } 
} 

如果你想運行的代碼,你必須下載並安裝新版本:這是內 lambda表達式,這大致相當於這個定義Java的。如果您已經在使用Java 8,那麼您可能必須正確配置您的系統。

從您的意見我收集,你使用的是Eclipse。首先,你必須使用能夠處理 Java 8(Luna或更新版本)的Eclipse,然後在Eclipse中選擇正確的JDK(首選項 - > Java - >已安裝的JRE),並將項目的源代碼兼容級別設置爲Java 8(項目的屬性 - > Java編譯器 - > JDK兼容性)。

+0

謝謝,我使用的是開普勒,因此Java 8沒有被支持。 –

+0

@AadishPatodi Kepler也提供了Java 8支持的升級版,但考慮到現在已經有三年了,我認爲是時候繼續。 ;-) –