import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * 设定通配符的下线 * <? super Type>表示 ?是与Type类型相同或者Type是?父类都是合法的。 * 不知道为什么2种测试结果都是一样的。 * */ public class Super { //此种方式 ?只能是T的子类 public static <T> T copy(java.util.Collection<T> dest ,java.util.Collection<? extends T> src) { T last = null; for(T ele:src) { dest.add(ele); last = ele; } return last; } //使用 super 方式 '?'可以是与T相同,或者是T的父类。 public static <T> T copy2(Collection<? super T> dest,Collection<T> src) { T last = null; for (T o : src) { dest.add(o); last = o; } return last; } public static void main(String[] args) { //第一张方式; List<Number> ln = new ArrayList<Number>(); List<Integer> li = new ArrayList<Integer>(); li.add(3); Number last = copy(ln, li); System.out.println(last.getClass());////class java.lang.Integer //第二张方式; List<Number> ln2 = new ArrayList<Number>(); List<Integer> li2 = new ArrayList<Integer>(); li2.add(3); Number last2 = copy2(ln2, li2); System.out.println(last2.getClass());//class java.lang.Integer } }
?