【发布时间】:2017-04-10 21:48:02
【问题描述】:
我有以下代码
Random rnd = new Random();
rnd.ints().limit(100)
.filter(i-> i > 0)
.map(Math::sqrt)
.forEach(System.out::println)
这会产生以下编译错误:
Streams.java:12: error: incompatible types: bad return type in method reference
.map(Math::sqrt)
^
double cannot be converted to int
如果我改用
.mapToDouble(Math::sqrt)
它有效。问题是编译器无法推断 map 中使用的 lambda 表达式的返回类型。有没有办法明确指定它?我个人觉得mapToxxx 的函数集很笨拙。
【问题讨论】:
-
哎哟。再次删除类型...
-
是的,你们都说得对,那是我的恐惧。
-
@juanpa.arrivillaga 不,这与擦除完全无关。这只是关于 OP 误读了文档。
-
@BrianGoetz 你是对的。懒得我了!我认为
IntStream是Stream的子类,但事实并非如此(它是BaseStream的子类),因此正如您所指出的,map方法的签名不同。