###上界通配符
我们可以使用上界通配符来放松对变量的限制。举例来说,如果你想写一个适用在List<Integer>, List<Double>, 和 List<Number>
上的方法,你可以通过上界通配符来实现。
为了声明一个上界通配符,使用通配符‘?’,然后是extends关键字。再然后是上界。注意在此extends既指继承也指实现。
List<? extends Number>
可以适用于List<Integer>, List<Double>
,但是List<Number>
只适用于但是List<Number>
。
考虑process方法如下:
1
| public static void process(List<? extends Foo> list) { /* ... */ }
|
上界通配符<? extends Foo>
适用于Foo和Foo的所有子类。process方法可以访问关于Foo的list
1 2 3 4 5
| public static void process(List<? extends Foo> list) { for (Foo elem : list) { // ... } }
|
sumOfList方法返回list中所有元素的和:
1 2 3 4 5 6
| public static double sumOfList(List<? extends Number> list) { double s = 0.0; for (Number n : list) s += n.doubleValue(); return s; }
|
以下代码使用一个Integer的list,会输出sum=6.0
:
1 2
| List<Integer> li = Arrays.asList(1, 2, 3); System.out.println("sum = " + sumOfList(li));
|
同样也可以使用double,以下的代码输出sum=7.0
1 2
| List<Double> ld = Arrays.asList(1.2, 2.3, 3.5); System.out.println("sum = " + sumOfList(ld));
|
下一页