Java 为什么此代码使用jdk8u45及更高版本编译,而不使用jdk8u25编译?
请有人帮我弄清楚为什么下面的代码用jdk8u45及以上版本编译,但用jdk8u25失败了? 我查看了JDK发行说明,但没有找到任何与此问题相关的内容,或者可能没有找到 代码Java 为什么此代码使用jdk8u45及更高版本编译,而不使用jdk8u25编译?,java,java-8,javac,Java,Java 8,Javac,请有人帮我弄清楚为什么下面的代码用jdk8u45及以上版本编译,但用jdk8u25失败了? 我查看了JDK发行说明,但没有找到任何与此问题相关的内容,或者可能没有找到 代码 public class Main { static class Param { final int id; Param(int id) { this.id = id; } } static class Subtask {
public class Main {
static class Param {
final int id;
Param(int id) {
this.id = id;
}
}
static class Subtask {
final Param param;
Subtask(Param param) {
this.param = param;
}
}
public static void main(String[] args) {
List<? extends Param> params = IntStream.range(1, 100).mapToObj(Param::new).collect(Collectors.toList());
NavigableMap<String, Subtask> map = params.stream()
.collect(Collectors.toMap(p -> UUID.randomUUID().toString(), Subtask::new, (a, b) -> a, TreeMap::new));
}
}
公共类主{
静态类参数{
最终int id;
参数(int-id){
this.id=id;
}
}
静态类子任务{
最终参数;
子任务(参数){
this.param=param;
}
}
公共静态void main(字符串[]args){
列表我在类型推断方面也有类似的问题,它在8u5和8u25之间的某个地方出现,并在8u40中得到了修复。8u40中的错误修复列表中有一些javac修复,我认为这就是你的问题所在
这是8u25中可能存在的一个bug的列表。这个错误对我来说没有太大意义。(我认为参数不匹配是错误的,出于某种原因,它还推断出了TreeMap
)是关于Oracle JDK的吗?我找不到任何关于这个的错误报告,但我不明白为什么不应该编译。这很可能是一个错误。我以前见过这个问题。我认为它在8u40中得到了解决。如果它被重新打开,我可以给出一个正确的答案,但我认为javac中的错误是:@dkatzel看起来像是答案。如果你发布它,我会接受它作为答案,谢谢。
Error:(33, 17) java: no suitable method found for collect(java.util.stream.Collector<org.ka.Main.Param,capture#1 of ?,java.util.TreeMap<java.lang.String,org.ka.Main.Subtask>>)
method java.util.stream.Stream.<R>collect(java.util.function.Supplier<R>,java.util.function.BiConsumer<R,? super capture#2 of ? extends org.ka.Main.Param>,java.util.function.BiConsumer<R,R>) is not applicable
(cannot infer type-variable(s) R
(actual and formal argument lists differ in length))
method java.util.stream.Stream.<R,A>collect(java.util.stream.Collector<? super capture#2 of ? extends org.ka.Main.Param,A,R>) is not applicable
(cannot infer type-variable(s) R,A,capture#3 of ?,T,K,U,M,K,V
(argument mismatch; java.util.stream.Collector<capture#2 of ? extends org.ka.Main.Param,capture#4 of ?,java.util.TreeMap<java.lang.Object,org.ka.Main.Subtask>> cannot be converted to java.util.stream.Collector<? super capture#2 of ? extends org.ka.Main.Param,capture#4 of ?,java.util.TreeMap<java.lang.Object,org.ka.Main.Subtask>>))