Java中的泛型
2018-03-05 本文已影响48人
即墨灯火
泛型方法
@Deprecated
public static <T> List<T> toList(T[] t) {
return java.util.Arrays.stream(t).collect(Collectors.toList());
}
下面是定义泛型方法的规则:
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(例子中的<T>
- 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
- 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
关键字 super,extends
public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elements) {
Preconditions.checkNotNull(elements);
return elements instanceof Collection ? new ArrayList(Collections2.cast(elements)) : newArrayList(elements.iterator());
}
private static <K, V, M extends Map<K, V>> BinaryOperator<M> mapMerger(BinaryOperator<V> var0) {
return (var1, var2) -> {
Iterator var3 = var2.entrySet().iterator();
while(var3.hasNext()) {
Entry var4 = (Entry)var3.next();
var1.merge(var4.getKey(), var4.getValue(), var0);
}
return var1;
};
}
public static <T, U, A, R> Collector<T, ?, R> mapping(Function<? super T, ? extends U> var0, Collector<? super U, A, R> var1) {
BiConsumer var2 = var1.accumulator();
return new Collectors.CollectorImpl(var1.supplier(), (var2x, var3) -> {
var2.accept(var2x, var0.apply(var3));
}, var1.combiner(), var1.finisher(), var1.characteristics());
}
super
和extends
定义了定义了泛型参数的边界
类型通配符
使用?
代替具体的类型参数,比如 List<?>