java泛型

ArrayList list=new ArrayList();

list.add(); 原始的list可以添加任何类型的数据。

  1. public class BeforeGeneric {  
  2.     static class ArrayList{//泛型之前的通用程序设计  
  3.         private Object[] elements=new Object[0];  
  4.         public Object get(int i){  
  5.             return elements[i];  
  6.         }  
  7.         public void add(Object o){  
  8.             //这里的实现,只是为了演示,不具有任何参考价值  
  9.             int length=elements.length;  
  10.             Object[] newElments=new Object[length+1];  
  11.             for(int i=0;i<length;i++){  
  12.                 newElments[i]=elements[i];  
  13.             }  
  14.             newElments[length]=o;  
  15.             elements=newElments;  
  16.         }  
  17.     }  
  18.     public static void main(String[] args) {  
  19.         ArrayList stringValues=new ArrayList();  
  20.         stringValues.add(1);//可以向数组中添加任何类型的对象  
  21.         //问题1——获取值时必须强制转换     
  22.         String str=(String) stringValues.get(0);   
  23.         //问题2——上述强制转型编译时不会出错,而运行时报异常java.lang.ClassCastException  
  24.     }  
  25. }  

 

泛型之后:

ArrayList<String> list=new ArrayList();

list.add(); 只能添加String数据类型的数据

 

ArrayList<Object> list=new ArrayList();

list.add(); 只能添加object类型数据

 

泛型之后无论你在<>里面添加什么数据,最后他都调用了原始的ArrayList,其实就是伪泛型。尖括号的作用是知道你要往数组添加的数据类型,让你往里面添加的数据都是一致的。使用的时候就不会出现错误。

如果没有尖括号标识的判断的话,你想建立一个String数组,但你可以往数组添加任何数据,当你添加了integer,添加没问题,但是使用的时候,获取的是String,需要强转,integer转成String的时候就会有错误。(后续更新)

查看了数组的源代码我们可以知道,里面的是object,当使用泛型定义的时候,原始类就会自动将尖括号里面的类型替换掉Object,从而初始化。

参考了:http://blog.csdn.net/sunxianghuang/article/details/51982979

posted @ 2017-10-12 17:50  广外帅哥  阅读(94)  评论(0编辑  收藏  举报