java泛型浅析

为什么要使用泛型?

设想你有很多数字要进行排序,你选择把数字先放到下面的集合中

ArrayList list = new ArrayList();

你当然可以往里面加数字,但你添加字符串编译时也不报错,可是list里面有字符串显然不是你想见到的。

list.add("hello");

JVM虚拟机在执行排序时当然无法把数字与字符串排序,会产生一个运行时错误,这使你无法完成对数字的排序。要是能在编译时就发现错误就好了,怎么实现呢?面对这个问题jdk1.5提出的泛型发挥了作用,如下创建集合list即可。<Integer>限制了集合中只能存放Integer类型的数据,此时你添加字符串编译就会报错。

ArrayList<Integer> list = new ArrayList<>();

可以说,使用java泛型的动机就是在编译时检测出错误。

下面来谈谈怎样使用泛型类、泛型接口、泛型方法。一般用<T>表示泛型,T可以是广泛的任意类型的数据。

泛型类

public class myFanXing<E>{
  private int name;
  private ArrayList<E> list = new ArrayList<>();
  
  public myFanXing(){//构造方法不带泛型
  }
  }

泛型接口

public calss male<T>{
   public T eat();
}

泛型方法

我们在上面的泛型类中写一个泛型方法

其中<T>标记此方法为泛型方法,T表明方法返回T类型的数据,do(T t)表明需要给方法传递T类型的参数

public class myFanXing<T>{
  public static <T> T do(T t){
  //方法体
  }
  }

泛型通配符

上面的尖括号<>中还可以放以下3种形式的符号

<?> 非受限通配 它可以表示任何一种对象类型

<? extends T> 它可表示a或a的子类型的通配类型。

<? super T> 它表示T的父类型

原文 

https://segmentfault.com/a/1190000022061780

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » java泛型浅析

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址