java 泛型_超解析java泛型!

9bef4d2faafbeeaca1a7409ee51cec0f.png

这篇文章来讲一下,我对Java泛型的理解!

请看下去

泛型入门

我们在学习集合的时候,会看到如下图的警告:

a675c5a1784e73d4c9f90aeacea5ae96.png

集合有一个特点——当你把对象丢进集合中,集合就会“忘记”这个对象的类型,而把它当做Object类型来处理。这样当程序员不小心将不同类型的数据丢进同一个集合中时就会出现错误。

从Java5以后,Java引入了“参数化类型”的概念,允许程序在创建集合时指定集合的类型,这就是我们今天要讲的泛型。

我们将上面的代码稍微做一下修改,如下图所示:

d39bd8968d37f2f4946191ee002c072a.png

我们发现上面的警告没有了,这时候list集合中只能存放String类型的变量,如果存放其他类型的变量,编辑器则会报错。

泛型的定义格式如下:

List<类型> list=new ArrayList<类型>();//后面的类型可以省略,直接写<>即可<br>List<类型> list=new ArrayList<>();//简写形式

深入泛型:

所谓泛型,就是允许在定义类、接口、方法时使用类型形参,这个类型形参(或叫泛型)将在声明变量、创建对象、调用方法时动态地指定(即传入实际的类型参数,也可称为类型实参)。Java5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参,这就是在前面程序中看到的 List<String>和 ArrayList<String>两种类型。

定义泛型接口、类:

//定义泛型接口,一个形参
public interface List<E>{}
 
//定义泛型接口,两个形参
public interface Map<K,V>{}<br><br>//定义泛型类<br>public class Apple<T>{<br>  private T info;<br>  <br>  public Apple(T info){<br>    this.info=info;<br>  }<br>  <br>  public Apple(){}//注意,这里定义构造方法时不能使用public Apple<T>(){}<br>}

从泛型类派生子类:

public class A extends Apple<String>

泛型类在派生子类时不能使用extends Apple<E>,而要传入具体的类型。就好比你在定义方法时用的是形参,但是调用方法时需要传入实际参数。

并不存在泛型类:

我们定义泛型类时会看到这样的定义:

List<String> l1=new ArrayList<String>()
 
List<Integer> l2=new ArrayList<Integer>()

ArrayList<String>确实也像一种特殊的ArrayList类,但其实不是,系统并没有为ArrayList<String>生成具体的类,而且也不会把它当做新类来处理。

泛型方法:

泛型方法的定义:

faf6cd723aa2e6ee99590b9b72a9776d.png

泛型方法的调用:

82e04b32ee907e67f00c0d8ddfb000ab.png

文章最后

感谢大家的观看!

37ba176fec70bd6cc13bfd16a4d293d4.png

面试题领取

请查看我专栏领取哦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值