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 }