JAVA泛型教程

JAVA泛型 


一、使用泛型与不使用泛型的比较。

 

  //不使用泛型

        ArrayList al1=new ArrayList();//1

       

        al1.add(new Integer(10));//2 这里可加入任何对象。

       

        Integer i1=(Integer)al1.get(0);//3 这里必须做强制类型转换。如果前面程序不小心往al1中放入了非Integer对象,那么程序运行到此将会报一个类型转换异常(java.lang.ClassCastException)

       

        //使用泛型

        ArrayList<Integer> al2=new ArrayList<Integer>();//1

       

        al2.add(new Integer(10));//2 这里只能加入Integer对象。

       

        Integer i2=al2.get(0);//3 这里不必做强制类型转换。不用再担心程序会报一个类型转换异常(java.lang.ClassCastException)

 

 

二、如何定义简单泛型

 

/**

 * : test

 * 源文件:Gclass.java

 * @author lilijun

 */

public class Gclass<T>

{

    private T a;

 

    public T getA()

    {

        return a;

    }

 

    public void setA(T a)

    {

        this.a = a;

    }

   

}


三、泛型中有继承的概念吗?   

 

 

//使用泛型

        ArrayList<Integer> al2=new ArrayList<Integer>();//1

       

        al2.add(new Integer(10));//2

        

        Integer i2=al2.get(0);//3  

       

        ArrayList<Object> alO=al2;//这样可以吗?

 

如果说ArrayList<Integer> 是一个 ArrayList<Object>就可以这么转换的话将出大问题:

 

        alO.add(new Object());将是合法的,对吧。

        Integer i2=al2.get(1);//这样就会导致类型转换异常。

 

所以说: ArrayList<Integer> 不是一个 ArrayList<Object>.

 

四、无限制的类型抽象——通配符 ?

 

    //不使用泛型的写法

    public void showCollection1(Collection c)

    {

       System.out.println(c);

    }

   

    //使用泛型的写法。

    public void showCollection2(Collection<?> c)

    {

       System.out.println(c);

}


 

五、有所限制的类型抽象

 

public void showCollection3(Collection<? extends Number> c)

    {

        for(Number n:c)

        {

          System.out.println(n.intValue());

        }

    }

六、泛型方法

 

//错误的写法

public void addToCollection3(Number[] a,Collection<? extends Number> c)

    {

        for(Number n:a)

        {

           c.add(n);//编译错误!

        }

       

    }

  //正确的写法  

 public <T extends Number> void addToCollection3(T[] a,Collection<T> c)

    {

        for(T n:a)

        {

          c.add(n);

        }

        

}

八、参考书:

Generics in the Java Programming Language》 作者:Gilad Bracha

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pike_Jun

随缘结缘可种善根得福报

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值