java的泛型

泛型概述

先看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ArrayList al1 =  new  ArrayList();
     ArrayList al2 =  new  ArrayList();
     
     al1.add( "hello" );
     al1.add( "world" );  
     al1.add( "abc" );
     al1.add( "hello" );
     al1.add( "1234" );
     al1.add( "abc" );
     al1.add( "hello" );
     
     for ( int  i =  0 ;i<al1.size();i++){
         //获取每一项
         String s = (String)al1.get(i);
         if (!al2.contains(s)){
             al2.add(s);
         }
     }
     for  (Object object : al2) {
         System.out.println(object);
     }

 根据集合的用法来存取数据上面看起来很爽的样子  但是如果我们要往集合存取不一样的类型时  往集合里添加数据很方便但是  等到我们取的时候问题很多  会出现不同的类型安全的问题,为了解决这一问题  我们需要限制一个集合只能存取一种类型   这就是我们所说的泛型

虽然上面的例子取的时候可以将数据统一成 string类型 需要强转类型    因为默认从集合中取数据时返回的都是Object类型(类的鼻祖 所有的类型都继承Object类型并且里面包含了一个自动向上转型 即任何的对象都可以赋值给一个Object类型的变量 但是有个缺点是 Object类型的变量不能直接调用子类中独有的方法  可以用向下转型解决)

下面来看使用泛型的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ArrayList<String> al1 =  new  ArrayList<>();
     ArrayList<String> al2 =  new  ArrayList<>();
     
     al1.add( "hello" );
     al1.add( "world" );  
     al1.add( "abc" );
     al1.add( "hello" );
     al1.add( "1234" );
     al1.add( "abc" );
     al1.add( "hello" );
     
     for ( int  i =  0 ;i<al1.size();i++){
         //获取每一项
         String s = al1.get(i);
         if (!al2.contains(s)){
             al2.add(s);
         }
     }
     for  (String s : al2) {
         System.out.println(s);
     }

 总结:

1.集合默认可以存任意类型的数据,貌似功能十分强大,  存的时候很爽,取得时候问题很多   类型安全问题
2.解决的思路:限制一个集合中只能存一种类型的数据
3.泛型技术就可以限制一个集合中只能存一种类型的数据
4.怎么使用泛型
  ArrayList<String> al=new ArrayList<String>();
5.使用了泛型后,在取数据的时候根本就不需要进行强制
6.泛型技术出现在JDK5
7.在JDK7的时候,推出了一种简化的写法:菱形写法
  ArrayList<String> al=new ArrayList<>();
8.泛型只支持引用数据类型,对于基本数据类型要用他们的包装类
9.所有的集合类都支持泛型

泛型的底层原理

包括泛型方法、泛型类、泛型接口

不管是创建泛型方法还是泛型类还是泛型接口都需要遵循以下三点:

1、声明

2、使用

3、赋值类型

泛型方法:

泛型类

泛型接口:

http://www.eko5785.cn/
http://www.eqn5017.cn/
http://www.oek0353.cn/
http://www.hmw0652.cn/
http://www.tub1546.cn/
http://www.taj7240.cn/
http://www.dto7731.cn/
http://www.tox1106.cn/
http://www.pzx0011.cn/
http://www.kdd4058.cn/
http://www.bti6873.cn/
http://www.nvg6571.cn/
http://www.krr6354.cn/
http://www.uym8620.cn/
http://www.blm3653.cn/
http://www.uqt9445.cn/
http://www.txr3194.cn/
http://www.hqu4552.cn/
http://www.veo6686.cn/
http://www.usx0758.cn/
http://www.bpl6646.cn/
http://www.iyi5365.cn/
http://www.xgm6868.cn/
http://www.hfk7896.cn/
http://www.ngp3761.cn/
http://www.bwb3762.cn/
http://www.jbx0190.cn/
http://www.fvj9657.cn/
http://www.ife7579.cn/
http://www.zws1014.cn/
http://www.bou1446.cn/
http://www.xvn7640.cn/
http://www.zus2206.cn/
http://www.muu1638.cn/
http://www.sxw8975.cn/
http://www.tfu0259.cn/
http://www.sfi6595.cn/
http://www.jxb0956.cn/
http://www.dwk7340.cn/
http://www.zlq5247.cn/
http://www.tud8565.cn/
http://www.fsy9769.cn/
http://www.bin6562.cn/
http://www.xtz2685.cn/
http://www.wjm3484.cn/
http://www.itb0047.cn/
http://www.tuj3041.cn/
http://www.uzu8211.cn/
http://www.cte8448.cn/
http://www.ciw9360.cn/
http://www.fam2103.cn/
http://www.his6102.cn/
http://www.nrr1653.cn/
http://www.fyc7738.cn/
http://www.tqz4909.cn/
http://www.dfr2203.cn/
http://www.eno7779.cn/
http://www.ybj8747.cn/
http://www.ywb6045.cn/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值