1、通配符
在开发中对象的引用传递(向上向下传递)是最常见的,但是,在泛型的操作中,在进行引用传递的时候泛型类型必须匹配才可以传递,否则不能传递。
public class demo1{
public static void main(String args[]){
Info<String> i = new Info<String>() ; // 使用String为泛型类型
i.setVar("MLDN") ; // 设置内容
fun(i) ; //把String泛型类型的i对象传递给Object泛型类型的temp。
}
public static void fun(Info<Object> temp){ // 接收Object泛型类型的Info对象
System.out.println("内容:" + temp) ;
}
};
泛型对象进行引用传递的时候,类型必须一致,如果非要传递,则可以将fun方法中Info参数的泛型取消掉(变成 void fun(Info temp))。或者使用?通配符。使用“?“接收泛型对象的时候,不能设置被泛型指定的内容。
例如:
package Thread1;
class Info<T>{
private T var ; // 定义泛型变量
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){ // 直接打印
return this.var.toString() ;
}
};
public class demo1{
public static void main(String args[]){
Info<?> i = new Info<String>() ; // 使用String为泛型类型
i.setVar("MLDN") ; // 设置内容,这里会出错,因为”?“通配符修饰的对象只能接收,不能修改,也就是不能设置。
}
};
2、泛型设置上下限
- 设置下限
- 声明对象:类名称<? extends 类> 对象名称
- 定义类 [访问权限] 类名称<泛型标识 extends 类>{}
Info<? extends Number> temp) // 只能接收Number及其Number的子类
- 设置上限
- 声明对象:类名称<? super类> 对象名称
- 定义类 [访问权限] 类名称<泛型标识 super 类>{}
Info<? super String> temp // 只能接收String或其父类