相关疑难解决方法(0)

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

我有以下代码的问题:

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<>());
Run Code Online (Sandbox Code Playgroud)

使用JDK 8直到更新11,此代码编译.使用JDK 8 update 20,它不再编译.在最后一个语句中,我必须显式指定String最后一个HashSet实例化的类型参数.

我想知道这个代码是否错误,或者它是否是最后一次JDK更新中的回归.

java java-8

25
推荐指数
1
解决办法
817
查看次数

通用toMap Collector无法编译

我正在尝试创建一个相当简单的收集器,将a转换Stream<Map.Entry>为a Map,但javac正在抱怨泛型.无法弄清楚为什么它不起作用.

import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CollectorSO {
    public static <K, V> void main(String[] args) {
        Collector<Entry<K, V>, ?, Map<K, V>> collector = Collectors.toMap(Entry::getKey, Entry::getValue);
        Stream<Entry<String, Object>> stream = Stream.empty();
        Map<String, Object> map = stream.collect(collector);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器输出:

Error:(11, 41) java: no suitable method found for collect(java.util.stream.Collector<java.util.Map.Entry<K,V>,capture#1 of ?,java.util.Map<K,V>>)
method java.util.stream.Stream.<R>collect(java.util.function.Supplier<R>,java.util.function.BiConsumer<R,? super java.util.Map.Entry<java.lang.String,java.lang.Object>>,java.util.function.BiConsumer<R,R>) is not applicable
  (cannot infer type-variable(s) R
    (actual and formal argument lists differ in …
Run Code Online (Sandbox Code Playgroud)

java generics java-8 java-stream collectors

3
推荐指数
1
解决办法
2740
查看次数

标签 统计

java ×2

java-8 ×2

collectors ×1

generics ×1

java-stream ×1