上限 ? extends E :可以接受E类型或者E的子类型 。用extends关键字声明,表示参数化的类型可能是所指定的类型,或者是此类型的子类。
下限 ? super E :可以接受E类型或者E的父类型。用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object。
举例说明
class Point<T>{
private T x;
private T y;
public T getX(){
return x;
}
public void setX(T x){
this.x = x;
}
public T getY(){
return y;
}
public void setY(T y){
this.y = y;
}
}
public class generic{
/*
static void show(Point<? extends Number> p){//调用show(p2)无法通过方法调用转换将实际参数Point<String>转换为Point<? extends Number>
System.out.println(p.getX());
System.out.println(p.getY());
}
*/
public static void show(Point<? super String> p){//调用show(p1) 无法通过方法调用转换将实际参数Point<Integer>转换为Point<? super String>
System.out.println(p.getX());
System.out.println(p.getY());
}
public static void main(String[] args) {
Point<Integer> p1 = new Point<Integer>();
p1.setX(1);
p1.setY(2);
Point<String> p2 = new Point<String>();
p2.setX("3");
p2.setY("4");
//show(p1);
show(p2);
}
}
|