Java JDK 8 update 20中是否存在类型推断回归?

Java JDK 8 update 20中是否存在类型推断回归?,java,java-8,Java,Java 8,我对以下代码有问题: public static <T> T firstNonNull(@Nullable T first, @Nullable T second) { return first != null ? first : second; } public static Set<String> getStrings() { return new HashSet<>(); } public static Set<String>

我对以下代码有问题:

public static <T> T firstNonNull(@Nullable T first, @Nullable T second) {
    return first != null ? first : second;
}

public static Set<String> getStrings() {
   return new HashSet<>();
}

public static Set<String> doesNotCompile = firstNonNull(getStrings(), new HashSet<>());
public static T firstNonNull(@Nullable T first,@Nullable T second){
返回第一个!=null?第一个:第二个;
}
公共静态集getStrings(){
返回新的HashSet();
}
公共静态集doesNotCompile=firstNonNull(getStrings(),newhashset());
使用JDK 8直到更新11,这段代码可以编译。 使用JDK 8 update 20,它不再编译。在最后一条语句中,我必须为最后一个
HashSet
实例化显式指定
String
type参数


我想知道这段代码是否有误,或者这是上次JDK更新中的一个回归。

这是JDK 8u20更新版本和当前JDK 9开发分支中存在的一个新错误。这段代码以前工作过,所以是的,这将被视为回归。JDK langtools团队提交了以下错误报告:

嵌套调用的推理失败

从评论中判断,当前行为似乎实际上符合规范(JLS),但该行为显然是错误的,因此可能需要对规范进行澄清


请注意,这是一个不同于另一个StackOverflow问题bug中报告的类型推断bug。这个bug已经被修复了,但是修复不在jdk8u20中。

Yep,jdk8u20和当前jdk9开发分支中的bug。看见请注意,这与另一个问题中报告的问题明显不同。此代码也不使用JDK 8u25编译。