Java泛型與集合筆記——子類型與通配符
不定期更新,無廢話開始:- List<Integer>不是List<Number>的子類,但List<Integer>是Collection<Integer>的子類。
- 一個(gè)List<? extends Number>的對(duì)象引用可以被賦值任何以Number或其子類為泛型的List或其子類的對(duì)象實(shí)例引用,如下例1 List<? extends Number> nums = new ArrayList<Integer>();
- 泛型方法可以顯示指定其返回結(jié)果的泛型類型,如下例1 Arrays.<Object>asList(1, 1.2, "Hello");
2 Collections.<Number>copy(objs, ints); - Get與Put原則:當(dāng)僅從結(jié)構(gòu)中取出值則使用extends通配符,當(dāng)僅向結(jié)構(gòu)中添加值則使用super通配符,當(dāng)對(duì)一個(gè)結(jié)構(gòu)即取出又添加值時(shí)不要使用任何通配符。1 //Collections.copy方法即使用super又使用extends的例子
2 public static <T> void copy(List<? super T> dest, List<? extends T> src)1 //另一個(gè)例子,對(duì)同一個(gè)結(jié)構(gòu)即取值又設(shè)值,不使用任何通配符
2 public static double sum(Collection<? extends Number> nums) {
3 double s = 0.0;
4 for (Number num : nums) s += num.doubleValue();
5 return s;
6 }
7
8 public static void count(Collection<? super Integer> ints, int n) {
9 for (int i = 0; i < n; i++) ints.add(i);
10 }
11
12 //注意這個(gè)方法參數(shù)的簽名,沒有使用任何通配符
13 public static double sumCount(Collection<Number> nums, int n) {
14 count(nums, n);
15 return sum(nums);
16 }
posted on 2016-05-25 10:10 Eric Song 閱讀(267) 評(píng)論(0) 編輯 收藏