Generics Java 8泛型输入类型函数

Generics Java 8泛型输入类型函数,generics,java-8,Generics,Java 8,有人能解释一下Java8中使用的通用逻辑吗 public static <T, K, U> Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper) { return toMap(k

有人能解释一下Java8中使用的通用逻辑吗

public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
                                Function<? super T, ? extends U> valueMapper) {
    return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
}
公共静态

收集器toMap(功能有关PEC的一般信息

你必须这样考虑PEC:

生产者
扩展

假设您有一个
列表,这些函数使用
T
s(因此
?super T
)并生成键或值(
?extends K
resp.
?extends U
),这是“producer extends and consumer super”的典型示例…
List<Integer> ints = Arrays.asList(1,2,3);

List<? extends Number> nums = ints;
Number n = ints.get(0); // will be 1
nums.add(1L); // compiler error
List<Object> objs = new ArrayList<>();

List<? extends Number> nums = objs;
nums.add(1);
nums.add(2L);
nums.add(3F);
nums.add("4"); // compiler error
objs.add("4"); // works still
Object o = nums.get(0);
Object o = objs.get(0);
Function<Object, Long> objToLong = (Object o) -> 1L;
Function<? extends String, ? super Number> keyMapper = objToLong;