当前位置: 首页 / 技术分享 / 正文
民哥带你快速精通java泛型(三)

2022-10-20

泛型    类型 map

  第三关 领略泛型之美

  走到这里,相信小伙伴们已经知道泛型的基本使用了,那么泛型之美到底体现在什么地方呢? 我们一起揭开这位“美人”的神秘面纱。

  泛型之美具体体现如下三个方面:

  1. 编译期间类型检查。

  如下代码:

  Setset = new HashSet();//指定set集合的泛型为Integer

  set.add(100);//添加数字

  set.add("java");//报编译期间异常:集合的泛型为Integer,不能添加String的字符串

  来,小伙们我们来分析下这段代码:

  1.我们创建了一个带Integer泛型的Set集合对象,指定Set集合只能添加Integer类型的数据

  2.如果添加其它类型的数据,java的编译器就会检查,并且提示错误信息,就好像老师检查作业一样,在出错的地方标记红线。

  在编译过程,java的编译器都会自动检查添加的数据与我们指定的泛型是否一致,以后再也不怕添加错误的数据了,很赞吧。

  2. 避免强转类型转换

  如下代码:

  //1.定义没有泛型的方法: 创建对象

  public static Object createObj(Object obj){

  return obj;

  }

  //2.定义有泛型的方法: 创建对象

  public staticT createT(T t){

  return t;

  }

  //3.测试

  public static void main(String[] args) {

  Date date1 = (Date) createObj(new Date());//没有泛型的方法: 类型强转

  Date date2 = createT(new Date());//有泛型的方法:不需要类型强转

  }

  为了加强对比,我们定义了两个方法,一个带泛型,一个不带泛型。

  根据测试的结果,显而易见:

  带泛型的方法在创建对象时,传入什么类型,就得到什么类型的对象

  不带泛型的方法,根据传入的类型获取对象时,需要强制转换一下。

  所以我们在开发中,特别是在定义创建对象的方法时,一般都使用泛型来进行定义,从而避免后期的类型强转。

  3. 可读性和灵活性

  如下代码:

public class GenericDemo6 {
public static void main(String[] args) {
//1.带泛型的map集合
Map<String,Student> map = new HashMap<String,Student>();//使用泛型:可读性强
map.put("01号",new Student("乔丹",23));//01号: 学生乔丹
map.put("02号",new Student("皮蓬",36));//02号: 学生皮蓬
//2.不带泛型的map集合
Map map2 = new HashMap();//没有泛型:可读性差
map2.put(new Student("乔丹",23),"01号");//学生在前:编号在后
map2.put("02号",new Student("皮蓬",36));//学生在后:编号在前
}
}
class Student{
String username;
Integer age;

public Student(String username, Integer age) {
this.username = username;
this.age = age;
}
public Student() {
}
}

  通过这段代码,我们可以看到泛型能规范代码的书写,让我们的代码可读性更强,便于后期我们对数据的处理。

  如果我们使用不带泛型的map集合保存数据,那么map的数据保存很混乱,不便于后期对数据进行处理。

  闯关练习

  请描述下列哪些选项是泛型的优点:

  A: 泛型可以避免类型强转

  B: 泛型可以在编译期间进行检查

  C: 泛型可以提高代码的可读性

  D: 泛型可以提高代码的灵活性

  答案:ABCD

分享: 更多

上一篇:民哥带你快速精通java泛型(二)

下一篇:

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
在线咨询
试听
入学教程
立即报名

Copyright 2011-2020 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号