泛型之--------通配符

2014-11-24 09:01:47 · 作者: · 浏览: 1
1、匹配任意的通配符
在开发中对象的引用传递是最常见的,如果在泛型类的操作中,在进行引用传递的时候泛型类型必须匹配才可以传递,否则是无法传递的。
 
class Info{  
    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 GenericsDemo12{  
    public static void main(String args[]){  
        Info i = new Info() ;       // 使用String为泛型类型  
        i.setVar("MLDN") ;                          // 设置内容  
        fun(i) ;  
    }  
    public static void fun(Info temp){        // 接收Object泛型类型的Info对象  
        System.out.println("内容:" + temp) ;  
    }  
};   
  

编译时错误:
class Info{  
    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 GenericsDemo13{  
    public static void main(String args[]){  
        Info i = new Info() ;       // 使用String为泛型类型  
        i.setVar("MLDN") ;                          // 设置内容  
        fun(i) ;  
    }  
    public static void fun(Info temp){      // 接收Object泛型类型的Info对象  
        System.out.println("内容:" + temp) ;  
    }  
};  

以上确实完成了改进的功能,但是,代码似乎有些不是太妥当,毕竟之前已经指定过泛型了。
class Info{  
    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 GenericsDemo14{  
    public static void main(String args[]){  
        Info i = new Info() ;       // 使用String为泛型类型  
        i.setVar("MLDN") ;                          // 设置内容  
        fun(i) ;  
    }  
    public static void fun(Info< > temp){     // 可以接收任意的泛型对象  
        System.out.println("内容:" + temp) ;  
    }  
};  

如果使用?意味着可以接受任意的内容,但是此内容却无法直接使用<?>修饰的泛型对象进行修改。
class Info{  
    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 GenericsDemo15{  
    public static void main(String args[]){  
        Info< > i = new Info() ;        // 使用String为泛型类型  
        i.setVar("MLDN") ;                          // 设置内容  
    }  
};