泛型是(Generics)是JDK1.5 的一个新特性,其实就是一个语法糖(语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西。),本质上就是编译器为了提供更好的可读性而提供的一种小手段,小技巧,虚拟机层面是不存在所谓泛型的概念的。

那么我们为什么使用泛型呢,原因在于:
1.通过泛型的语法定义,约束集合元素的类型,进行安全检查,把错误显示在编译期
2.代码通用性更强(后面有案例)
3.泛型可以提升程序代码的可读性,但它只是一个语法糖,对于JVM运行时的性能是没有任何影响的。

编译时类型检查

我们先来看一个简单的集合代码:

         Collection c = new ArrayList();c.add(1);c.add(2);System.out.println(c);

我们在编译器上会发现它有一个黄色的警告,但是并没有报错我们也可以运行,但是也就在这个时候,张三想要再往集合中输入几个数字,来通过测试几个数字相加来熟悉集合的方法如何使用,于是他加入了3,4,5

        Collection c = new ArrayList();c.add(1);c.add(2);c.add(3);c.add(4);c.add('r');c.add(5);System.out.println(c);

很显然1~5之间混入了一个奇怪的东西但是程序并没有报错,毕竟字符也可以作为元素而存在嘛,但是张三很崩溃,他算不出他想要的答案(他学了一天了,眼睛已经几乎看不到编译器不报错的问题),张三强忍着眼疼,看了好几遍终于流着泪找到了错误。他想,要是编译器会报错就可以了,于是他看了这篇文章。我们看下面的代码:

        Collection<Integer> c = new ArrayList();c.add(1);c.add(2);c.add(3);c.add(4);//c.add('r');c.add(5);System.out.println(c);

请允许我把加入字符r的一行注释掉,毕竟它已经开始报错了。这就是泛型最基本的一种用法。

代码通用性更强

我们原来在讲多态的时候通过向上转型的方式,来增加了代码的灵活性(不需要知道子类的具体特点就能实现运行结果)。
我们用泛型同样可以做到甚至做得更好。

 public static <E> void print(E[] arr) {for(E e : arr) {System.out.println(e);}}public static void main(String[] args) {Integer[] scores = new Integer[]{ 100,98,80 };String[] names = new String[]{ "语文","数学","英语" };Double[] moneys = new Double[] { 10.1,20.2,30.3 };ApiCollection.print(scores);ApiCollection.print(names);ApiCollection.print(moneys);}

我们将E改为Object也是同样的道理,但是现在用E更符合我们的标题嘛。

类型擦除

泛型只是在编译期间生存,编译后就被干掉了,真正运行时,大多情况下取而代之的是Object。也就是上一个方法的E变成了Object…他的存在只是为了方便我们编程,如果要对类型擦除做详细解释可能要用到反射这个目前还没有讲过,所以我们在这里仅仅先让大家感受一下类型擦除:

     List<String> l1 = new ArrayList<String>();List<Integer> l2 = new ArrayList<Integer>();System.out.println(l1.getClass() == l2.getClass());

上述的题目答案为true原因是因为String和Integer的类型均被类型擦除掉了,我们所能看到的编译后的父类都是ArrayList。

泛型的作用和使用方法相关推荐

  1. java泛型方法作用_java泛型的作用与使用方法是什么?

    泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变 ...

  2. Java 泛型的作用以及类、方法、接口的使用和通配符

    一.泛型的作用 1.集合如果不使用泛型:         存的时候什么类型都可以,但是要取的时候会懵,因为取出来啥也不是,或者不知道取的是什么类型的数据.像这样: // 创建ArrayList集合,不 ...

  3. java泛型的作用和实现原理_java泛型的作用及实现原理

    一.泛型的介绍 泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Ja ...

  4. java泛型的作用及其基本概念

    一.泛型的基本概念 java与c#一样,都存在泛型的概念,及类型的参数化.java中的泛型是在jdk5.0后出现的,但是java中的泛型与C#中的泛型是有本质区别的,首先从集合类型上来说,java 中 ...

  5. java泛型类的作用_【Java-泛型系列一-泛型的作用】

    1 泛型是什么 泛型是一种在编译期间进行集合中的元素进行限定的机制.使用了泛型,在运行期见可以安全的将元素强转成指定的元素.下面举个例子看一下有和没有泛型的区别 1.1 假如没有泛型 List arr ...

  6. java泛型的作用_Java 泛型的作用及其基本概念

    一.泛型的基本概念 java与c#一样,都存在泛型的概念,及类型的参数化.java中的泛型是在jdk5.0后出现的,但是java中的泛型与C#中的泛型是有本质区别的,首先从集合类型上来说,java 中 ...

  7. 【泛型】泛型的作用与定义

    一.泛型的基本概念 泛型是JDK1.5的一种新特性,它的本质是参数化类型的应用,也就是说操作的数据类型被指定为一个参数,在用到的时候再指定具体的类型.这种参数类型可以用在类.接口和方法的创建中,分别称 ...

  8. ios10 safari浏览器 在touchmove 里面写e.preventDefault(); 不起作用 的解决方法

    ios10 safari浏览器 在touchmove 里面写e.preventDefault(); 不起作用 的解决方法 参考文章: (1)ios10 safari浏览器 在touchmove 里面写 ...

  9. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

最新文章

  1. MATLAB 多项式
  2. em算法 实例 正态分布_【机器学习】EM算法详细推导和讲解
  3. CodeForces - 2B The least round way
  4. Python稳基修炼之计算机等级考试易错细节题3(含答案)
  5. boot spring 启动 文本_springboot 选择启动某个配置文件
  6. 收集的材料 关于数据库和抓取器方面的
  7. XAML实例教程系列 - 类型转换器(Type Converter)
  8. PythonWEB框架之Tornado
  9. 【通信】基于matlab Alamouti空频编码【含Matlab源码 801期】
  10. solaris 8 重置系统配置
  11. PopClip 能让像苹果电脑像 iOS 一样选中文字后弹出搜索、复制、粘贴等选项
  12. XJOI字符串的大小关系1级19段
  13. MCE | 癌相关基因 ALK 参与胖瘦调节
  14. 如何保存gif表情包里面的部分图片?
  15. mysql存储过程之错误处理
  16. python中execute函数_python中的函数是如何使用的?
  17. php intersect,php array_intersect()函数使用代码
  18. 还原codeblocks 的Logs others
  19. 天天生鲜项目——用户信息页
  20. RobotStudio ABB 仿真软件过期 后的处理

热门文章

  1. java rtmp服务器_RTMP服务器安装
  2. Python中的包(package)、模块(module)、方法(function)的逻辑关系
  3. Qt+python+爬虫
  4. JS逆向极验有感滑块
  5. Google发布DNS测速工具Namebench 1.1测试版
  6. SpringBoot:解决循环依赖
  7. C语言程序设计第五版 谭浩强 第四章 课后习题 答案
  8. 51nod 1171 大灾变
  9. Android没有图标的APK打开方法
  10. 面试宝典 js基础答案3