Discuss / Java / 廖老师,Stream类中的map方法的mapper中的泛型参数也是PESC原则吗?怎么理解起来有点费劲

廖老师,Stream类中的map方法的mapper中的泛型参数也是PESC原则吗?怎么理解起来有点费劲

Topic source

smilezmhFocus

#1 Created at ... [Delete] [Delete and Lock User]
public interface Stream<T> extends BaseStream<T, Stream<T>> {
  <R> Stream<R> map(Function<? super T, ? extends R> mapper);

}

smilezmhFocus

#2 Created at ... [Delete] [Delete and Lock User]

自己动手实践了一下,发现这个本质上也只是做了个类型检查。跟c#的泛型容器真泛型不一样,所以java才衍生出Type和ParameterizedType。map的参数符合Function<? super T, ? extends R> mapper;T是Integer类型 ,所以是Integer的父类可以,Number可以,BigInteger不可以。

  Integer[] nums = {1, 2, 3};        List<Float> list = Arrays.asList(nums).stream().map(Number::floatValue).collect(Collectors.toList());        List<Float> list1 = Arrays.asList(nums).stream().map(Integer::floatValue).collect(Collectors.toList());        ArrayList<Number> list2 =(ArrayList) Arrays.asList(nums).stream().map(Integer::floatValue).collect(Collectors.toList());        // Compile error//        List<Float> list3 = Arrays.asList(nums).stream().map(BigInteger::floatValue).collect(Collectors.toList());

  • 1

Reply