Scala到Java8流兼容性问题

Eev*_*evy 4 lambda scala java-8 java-stream

(阶)

Files.walk(Paths.get("")).forEach(x => log.info(x.toString))
Run Code Online (Sandbox Code Playgroud)

Error:(21, 16) missing parameter type
  .forEach(x => log.info(x.toString))
           ^
Run Code Online (Sandbox Code Playgroud)

和(java8)

Files.walk(Paths.get("")).forEach(x -> System.out.println(x.toString()));
Run Code Online (Sandbox Code Playgroud)

工作良好

怎么了?

Dim*_*ima 8

stream.forEach(x -> foo()) 在java中是语法糖

stream.forEach(
  new Consumer<Path> { public void accept(Path x) { foo(); } }
)
Run Code Online (Sandbox Code Playgroud)

这与x => ...scala 完全不同,scala是一个实例Function[Path,Unit].

试试这个;

Files.walk(Paths.get(""))
  .forEach(new Consumer[Path] { def accept(s: Path) = println(s) })
Run Code Online (Sandbox Code Playgroud)

  • `x - > foo()`对于内部类来说不是*语法糖.但无论如何,这是一个不重要的实施细节.更重要的是,它是一个用于实现*目标类型*的构造,它在这里是`Consumer <Path>`... (2认同)