Get與Put原則:當僅從結構中取出值則使用extends通配符,當僅向結構中添加值則使用super通配符,當對一個結構即取出又添加值時不要使用任何通配符。
1 //Collections.copy方法即使用super又使用extends的例子
2 public static <T> void copy(List<? super T> dest, List<? extends T> src)
1 //另一個例子,對同一個結構即取值又設值,不使用任何通配符
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 //注意這個方法參數的簽名,沒有使用任何通配符
13 public static double sumCount(Collection<Number> nums, int n) {
14 count(nums, n);
15 return sum(nums);
16 }