Get與Put原則:當(dāng)僅從結(jié)構(gòu)中取出值則使用extends通配符,當(dāng)僅向結(jié)構(gòu)中添加值則使用super通配符,當(dāng)對一個(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è)例子,對同一個(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 }