Jdk1.5 新特性 泛型

1 泛型

   在Jdk1.5以前的版本中,如果我们通过 (ClassType)object  强制转换一个对象的时候,即使被转换的类型不是ClassType,在编译的时候,也不会报错,但是在运行的时候,就会抛出ClassCastException例外。

泛型就是为了获取编译时安全和运行是最小抛出ClassCastExcepiton例外。

 

例:

   public class GenericSample<T>{

       private T sample;

 

       public void setSample(T sample){

           this.sample = sample;

       }

       public T getSample(){

           return sample

       }

 

       public static void main(String[] art){

 

           GenericSample<String> gSampleString = new GenericSample<String>();

           GenericSample<Date> gSampleDate = new GenericSample<Date>();

 

           gSampleString.setSample("this is a generic");

           gSampleDate.setDate(new Date("20090305"));

       }

   }

 

解释:

   在上面例子中,我们定义了一个泛型类GenericSample,泛型类的类型是通过T来标记的。在实例化GenericSample的对象的时候,我们才具体指定类这个泛型类中T的类型。顾名思义,所谓泛型,就是可以可以接受所有的类型。

 

2 限定泛型类中T的类型

   例:

   public class GenericSample<T extends String>{

       private T sample;

 

       public void setSample(T sample){

           this.sample = sample;

       }

       public T getSample(){

           return sample

       }

 

       public static void main(String[] art){

  

           GenericSample<StringChild1> gSampleChild1= new GenericSample<StringChild1>();

           GenericSample<StringChild2> gSampleChild2 = new GenericSample<StringChild2>();

 

           gSampleString.setSample("this is a generic");

           gSampleDate.setDate(new Date(2009, 3, 5));

       }

   }

 

解释:

  通过extends关键字,限定T的类型,T只可能是某个接口和类的子类(注意:接口,类都用extends关键字)。上面的例子,在实例化泛型类GenericSample的对象时,T只可以是String的子类。否则的话,编译会出错。

   在public class GenericSample<T>中,虽然我们没有使用extends限定T,但是,实际上T是默认extends object的。

  也就是说public class GenericSample<T>等价于public class GenericSample<T extends Object>

 

3 Jdk1.5 的集合类

  在Jdk1.5中,集合类(List ,Collection, ArrayList, Array)都被泛型化了。这样我们从集合类对象中通过Get()方法取出对象的时候,无需进行类型转换,当然也不会发生ClassCastExcepiton例外。

  3.1 定义一个容器类的引用:ContenerClassType<ClassType> listClassType

   ContenerClassType: 容器类类型

   ClassType:容器类中可以保存的对象类型

 

    例如:List<String> listString = null;

 

  3.2 实例化一个容器类对象:

    new ContenerClassType<ClassType>()

    例如:new List <String>()

 

  3.3 List, List<?>, List<ClassType> 的区别

     List:可以保存任意的对象。

     List<?>:只可以保存任意的对象,但是一旦?被指定了,就只能保存?指定的对象。例如,List<String>只可以保存String对象。

     List<ClassType>:只可以保存,ClassType类型的对象。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值