java泛型

来源:互联网 发布:台湾文献数据库 编辑:程序博客网 时间:2024/05/19 17:23
  • 支持泛型类以及泛型方法
class MyGen<T,E>{    //<X>类型声明在返回值前,若未在类中声明,则必须在方法里声明    public static <X> X myCast(Object o){        return (X)o;    }}//类型推导,由前面的引用进行String s = MyGen.myCast("lalala");//显式调用String s = MyGen.<String>myCast("lalal");
  • 泛型使用类型擦除,对于子类继承使用桥方法
public class T{        public static void main(String[] args){                F<String> f = new S();                System.out.println(f.getE("xxx"));        }}class F<E>{        //该方法将被擦除成public Object getE(Object e){...}        public E getE(E e){                return null;        }}class S extends F<String>{        //实际的方法重写代码,系统将为S生成一个public Object getE(Object e){...}的桥方法,并将实际调用代理到以下的方法        public String getE(String s){                return "love";        }}

//以下为桥接代码

  • 通配符,一般只用于方法参数中,进行更大范围的参数传入
? extends E,表示E的所有子类中的某一个具体子类.? super E,表示E的所有父类中的某一个具体父类.? 等价于(? extends Object) 表示所有类中的某一个具体类.(只用于<?>替代<Object>使用Object方法以及Class<?>与具体类型无关方法)import java.util.ArrayList;import java.util.List;/** * @author doggy *         Created on 16-5-27. */public class Test {    public static void main(String[] args) {        List<? extends String> l = new ArrayList<String>();        addFrom(l);        List<Object> ll = new ArrayList<Object>();        addTo(new ArrayList<Object>());    }    //不能从super泛型中获得数据(因为不确定是哪个父类),只能使用Object进行for循环。    public static void addTo(List<? super String> es){        es.add("sdfsf");    }    //不能往extends泛型中添加数据,因为某个具体子类中加入其他子类可能错误。    public static void addFrom(List<? extends String> es){        for(String x:es){            System.out.println(es);        }    }}
0 0
原创粉丝点击