我将在https://spring.io/guides/tutorials/bookmarks/
处使用Spring Tutorial构建REST服务我陷入了困境。在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中做了什么。我从未在Java中使用过这个运算符。首先是否有任何运营商?
即使是我的日食也说了同样的事情
evt无法解析为变量
似乎没有人在互联网上提出类似的问题,我搜索了很多。我错过了什么吗?
答案 0 :(得分:4)
这是Java 8语法(lambda表达式,即一种匿名函数),根据您的描述,您似乎不熟悉Java 8.您可能仍在运行Java 7或更早版本。您可以使用java -version
命令检查Java版本。
关于evt
:在 lambda表达式中定义了,大致相当于:
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"));
}
}
}
如果要运行该代码,则必须下载并安装新版本的Java。如果您已经在使用Java 8,那么您可能需要正确配置系统。
从您的评论中我收集到您正在使用Eclipse。首先,您必须使用能够处理 Java 8(Luna或更新版本)的Eclipse,然后在Eclipse中选择正确的JDK(Preferences - &gt; Java - &gt; Installed JREs),并设置项目与Java 8的源兼容级别(项目的属性 - &gt; Java编译器 - &gt; JDK合规性)。