Java 泛型支持通配符,类型有以下3类:
- 无限定通配符 形式<?>
- 上边界限定通配符 形式< ? extends SuperClass>
- 下边界限定通配符 形式< ? super SubClass>
那么该如何 确定该使用何种通配符呢?
如果是“读”操作 则需要限定 上边界,如果是写操作则需要限定下边界;而无限定通配符表示只读,不能进行增加、修改。
import java.util.List;
/**
*
* @author zhangwei_david
* @version $Id: WildcardDemo.java, v 0.1 2014年10月19日 下午6:38:25 zhangwei_david Exp $
*/
public class WildcardDemo {
public static <E> void readError(List<? super E> list) {
for (Object object : list) {
}
}
public static <E> void read(List<? extends E> list) {
for (E e : list) {
}
}
public static <E> void write(List<? super Number> list) {
list.add(1);
}
public static <E> void write(List<? extends Number> list){
list.add(1);
}
}
我们可以发现
public static <E> void write(List<? extends Number> list){
list.add(1);
}根本就不能通过编译。
public static <E> void readError(List<? super E> list) {
for (Object object : list) {
}
}也无法起到参数类型限定的作用