【发布时间】:2014-03-28 13:11:33
【问题描述】:
当试图回答一个不同的问题时,我发现我的代码只有在我明确给出类型参数时才能编译(无论代码计算什么都没有意义,我知道):
public Double calculateResult(int value) {
return 0.0d;
}
private void init2() {
List<Callable<Double>> list = IntStream.range(1, 99)
.<Callable<Double>>mapToObj(value -> (() -> calculateResult(value)))
.collect(Collectors.toList());
}
当从mapToObj 中删除类型参数<Callable<Double>> 时,它不会编译,并给出它的错误
无法自行推断类型变量
如果我将其更改为使用Supplier<Double> 或DoubleSupplier,它也无法推断出参数。
为什么它不能推断类型参数?
更新,我是用Netbeans 8.0编译的,还没用javac编译器检查过。
【问题讨论】:
-
不知道你用的是哪个版本的JDK 8。我得到了它的最新版本,我刚刚编译并运行了你的代码,没有任何问题。没有警告,没有编译器错误。一切顺利。
-
@EdwinDalorzo 您是否按照问题所述从
mapToObj中删除了<Callable<Double>>?
标签: java generics lambda type-inference java-8