在声明一个接口和类的时候可以使用尖括号带有一个或者多个参数但是当你在声明属于一个接口或者类的变量的时候或者你在创建一个类实例的时候需要提供他们的具体类型。我们来看下下面这个例子

List<String>words = new ArrayList<String>();
words.add("Hello ");
words.add("world!");
String s = words.get(0)+words.get(1);
assert s.equals("Hello world!");

  

  在集合框架中,ArrayList<E>实现了接口List<E>,上面这个简单的代码声明了包含了多个字符串列表的变量words,并且创建了一个ArrayList实例,把两个字符串添加到这个列表中,然后把他们取出来。在Java以前的泛型中,相同的代码会这样写:

List words = new ArrayList();
words.add("Hello ");
words.add("world!");
String s = ((String)words.get(0))+((String)words.get(1))
assert s.equals("Hello world!");

  

  如果没有泛型,参数类型会被忽略掉。但是在元素从列表中取出的时候你必须,明确的使用强制类型转换。实际上,从上面两种源文件编译后的字节码文件时完全一样的。我们说这是泛型擦除。因为List<Integer>,List<String>, and List<List<String>>等等这些类型在运行时都是相同的类型List。我们将从第一个程序到第二个程序的处理过程称为泛型擦除。术语擦除是有一点不准确,因为程序擦除了参数类型但是增加了强制转换。

  泛型隐式的使用了相同的强制转换而显示的表示没有使用泛型。如果这个转换失败,那么使用泛型写的代码就很难去调试了。因为下面的前置条件说以为什么说泛型是可靠的:
通过泛型编译加入的隐式转换永远不会失败。

  这个条件有很重要的一点是:对于编译器来说,它没有已发布的未检查的警告的时候这个才有效。稍后我们将在一定程度上讨论什么导致已发布的未检查的警告还有就是怎么样最小化他们的影响。通过泛型擦除实现的泛型有很多好处。它使事情变得简单,在这样的泛型中不会添加任何根本上讲新的东西;它使事情变得的小巧,准确来讲它只会有一个List的实现,而不是针对每个类型有一个版本;它擦除了过程,因为在相同的库中我们可以用泛型或者非泛型的形式去访问调用。最后一点是很值得好好的阐述的,你不会碰到令你不快的问题在你使用两种不同版本的类库时:使用1.4或者以前的遗留的非泛型版本,和一个使用版本5和6的泛型版本。在字节码层面,不适用泛型的代码和使用泛型的代码是一样的。没有必要立刻转向全部转泛成型---你可以升级你的代码通过每次只更新一个包一个类一个方式去开始使用泛型。我们甚至可以解析出你为遗留大代码声明的泛型类型。

  通过泛型擦除还有另外一个影响就是数组类型和参数化的类型在使用上是不一样的。运行new String[size] 将分配一个数组并且另外在这个数组中存储String类型的组件。作为对比,运行new ArrayList<String>()分配了一个列表,但是不另外存储列表的元素类型在这个列表中。在术语中,我们说Java具体化了数组元素的类型。但是没有具体化列表的元素类型。

很难去

Java泛型和集合之泛型介绍的更多相关文章

  1. Java基础之集合与泛型

    话不多说,直接上图 1.Collection集合小结 注意: 凡是使用哈希表保存对象的容器,保存的对象在容器中都是唯一的,唯一性是通过被保存对象的hashCode和equals方法共同确定: 凡是使用 ...

  2. Java泛型和集合之泛型VS模板

    Java的泛型很像C++中的模板,说到Java 泛型和C++中的模板的关系时,有两个重要的方面需要被考虑到:语法和语义.语法看起来是相似的,可是语义却明显是不同的. 在语法上讲,选择尖括号  是因为他 ...

  3. java基础(7)集合与泛型

    第一部分:Collection集合 1 collection集合概述 集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map. C ...

  4. JAVA基础之集合、Iterator迭代器、泛型及增强for循环

    个人理解: 对于集合,首先要明确的是最顶层的接口是Collection接口类,其包含一些基本的方法以便子类调用,不过在定义的时候最好定义好数据类型,以免遍历时还得必须进行向上转型:特别注意的是其没有关 ...

  5. java基础(18):集合、Iterator迭代器、增强for循环、泛型

    1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...

  6. Java 集合和泛型

    一.集合(Collections) Java使用集合来组织和管理对象. 1.Java的集合类 集合类主要负责保存.盛装和管理对象,因此集合类也被称为容器类. 集合类分为Set.List.Map和Que ...

  7. Java集合之泛型的使用

    Java集合之泛型的使用 泛型提供了一种轻便灵活的数据操作,数据的安全性相对提高. 泛型提供了对列表元素的约束条件,比如ArrayList有序链表,可存储任意类型的元素. 此处构建一个ArrayLis ...

  8. Java中泛型在集合框架中的应用

    泛型是Java中的一个重要概念,上一篇文章我们说过,当元素存入集合时,集合会将元素转换为Object类型存储,当取出时也是按照Object取出的,所以用get方法取出时,我们会进行强制类型转换,并且通 ...

  9. Java基础知识强化之集合框架笔记30:集合之泛型的引入

    1. 泛型的引入: (1)首先我们看看下面这一段代码,如下: package cn.itcast_01; import java.util.ArrayList; import java.util.It ...

随机推荐

  1. Android视频通话Java代码

      近期学习Android平台下跨平台音视频通信开发,尽管网上有非常多开源项目供我们參考学习.但音视频效果非常一般,还有非常多不稳定的因素,毕竟是开源嘛.在国内我找到了一个比較好音视频通信解决方式(百 ...

  2. JAVA —— 数据类型

    引言:java 数据类型可分为两大类:基本数据类型和引用类型,其中基本数据类型又包括整形.浮点型.字符型和布尔型,而引用型变量与基本类型变量不同,它的值是指向内存空间的引用(地址),引用在其他语言中称 ...

  3. WebHooks

    WebHooks ASP.NET 5 Beta 7 版本   在 VS2015 发布的同时,微软也发布了 ASP.NET 5 的路线图(详见ASP.NET 5 Schedule and Roadmap ...

  4. JQUERY省、市、县城市联动选择

    JQUERY 插件开发——CITYLINKAGE(省.市.县城市联动选择) 第一部分:背景   开发源于需求,本次城市联动选择插件算是我写插件的一个特例吧,不是我目前工作需要些的,算是兴趣驱使吧.之前 ...

  5. hdu 4035 Maze(期待更多经典的树DP)

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submi ...

  6. mariadb 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    [root@localhost /]# systemctl stop mariadb.service[root@localhost /]# mysqld_safe --user=mysql --ski ...

  7. IntelliJ IDEA于Make Project时报:子字符串不是票面金额的结束、非法的表达式显示启动

    IntelliJ IDEA于Make Project当系统提示很多错误,什么孩子不是字符串票面金额的结束.非法的表达式显示启动-- 解决方法是改变File Encoding,更改方法:File > ...

  8. java 科学计算库

    stackoverflow 上的讨论, 其中不乏lib的作者... http://stackoverflow.com/questions/529457/performance-of-java-matr ...

  9. 网络资源(5) - Android视频

    2014_08_24 http://v.youku.com/v_show/id_XMjM5NjU2OTI0.html?f=5486194 Android开发视频教程1 http://v.youku.c ...

  10. 《JAVA与模式》之单例模式 [转]

    在阎宏博士的<JAVA与模式>一书中开头是这样描述单例模式的: 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式的 ...