【发布时间】:2016-11-11 23:37:07
【问题描述】:
我正在通过 https://spring.io/guides/tutorials/bookmarks/ 的 Spring 教程构建 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 无法解析为变量
似乎没有人在网上问过类似的问题,我搜索了很多。我错过了什么吗?
【问题讨论】:
-
这是 Java 8 语法(一个 lambda 表达式,即一种匿名函数),根据您的描述,您似乎对 Java 8 并不熟悉。您可能仍在运行 Java 7 或更早版本。
-
这看起来像 Java 8 中的 Java lambda 表示法。您可以查看是否有 Java 7 版本的教程,或者这里是 lambdas 的 oracles 指南docs.oracle.com/javase/tutorial/java/javaOO/…
-
@tobias_k 好的,我明白了。感谢您提供的信息,以及 evt.这是否也属于新的语法定义。我的意思是,如果不定义标识符,我们可以这样使用它们吗?有链接吗?
-
是的,它是新符号的一部分,evt 的类型将由编译器推断。如果你将你的eclipse项目切换到使用JDK 8,上面的代码应该没有问题,至少理论上是这样
-
evt被定义在 内 lambda 表达式中。那个表达式,evt -> Arrays.asList(...)大致相当于new Function() {public List apply(Event evt) {return Arrays.asList(...)}}
标签: java eclipse spring rest spring-boot