在Java集合类中看到的List<e>这样的声明方式,<e>称为类型参数列表。当你使用这样的类的时候,需要提供相应的绑定类型。在类型声明中每次出现的类型参数符号,被称为裸类型变量。比如,get方法返回的是V,而不是Object。
Java通过擦除参数类型信息来创建一个等价的类型。每个类型参数都关联一个上界,默认是java.lang.Object。客户代码的绑定信息被擦除,并被替换成相应的类型转换。
声明:
</e></e>
java 代码
- import java.util.*;
-
- public class MultiHashMap
-
- private Mapnew HashMap
-
- public int size() {
-
- return map.size();
-
- }
-
- public void put(K key, V value) {
-
- List<v> values = map.get(key); </v>
-
- if (values == null) {
-
- values = new ArrayList<v>(); </v>
-
- map.put(key, values);
-
- }
-
- values.add(value);
-
- }
-
- public List<v> get(K key) { </v>
-
- return map.get(key);
-
- }
-
- }
擦除之后:
java 代码
- import java.util.*;
-
-
-
- public class MultiHashMap {
-
- private Map map = new HashMap();
-
- public int size() {
-
- return map.size();
-
- }
-
- public void put(Object key, Object value) {
-
- List values = (List)map.get(key);
-
- if (values == null) {
-
- values = new ArrayList();
-
- map.put(key, values);
-
- }
-
- values.add(value);
-
- }
-
- public List get(Object key) {
-
- return (List)map.get(key);
-
- }
-
- }
所有类型参数的默认上界是Object。可以限制为另外一个上界。使用extends就可以了。
当你不关心参数绑定的具体类型的时候,可以使用通配符?。不能把一个List<string>的引用赋给一个List的引用。通配符可以与extends结合起来使用。
当一个方法的参数与它的另一个参数或是返回值的类型之间存在依赖的时候,应该使用范型方法;否则,应该使用通配符。
上界的通配符,在读取一个数据结构的时候是有用的;当写入一个数据结构的时候,可以使用下界通配符。
使用super可以指定下界。
可以在extends中指定附加的边界或是多个类型。第一个约束可以是接口或是类,接下来的约束必须是接口。通过附加边界,你可以限制参数实现多个接口。
java 代码
- public static
- <t>extends Iterable&Comparable<t>> </t>void iterateAndCompare(T t) </t>
可以通过checked wrapper来解决遗留代码的类型安全问题。
不能创建已经绑定的参数类型的数组。
不能使用裸类型变量来创建新的对象。不能把裸类型变量作为instanceof操作符的目标。
通过反射不能知道类型变量的绑定信息,因为擦除机制的存在。</string>
分享到:
相关推荐
Java 范型Java 范型
Java 范型攻略篇
JAVA范型指南:讲述范型,范型通配符,范型方法,范型与久代码(无范型)的融合,范型的擦除与翻译等...
java范型[参考].pdf
java范型[参照].pdf
java1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.docjava1.5范型编程指南.doc
java范型学习.............
Java范型机制 Java范型机制 Java范型机制 Java范型机制Java范型机制 Java范型机制
java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
本例子说明演示了Java范型使用的动机、范型类的使用、范型方法的使用,以及范型的缺陷:类型擦除(type erasure).因为,现在Java的反射机制不能确定集合中的对象类型! 在实际应用中,如果能够灵活应用范型和反射...
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
Java程序设计范型和枚举PPT教案学习.pptx
范型参考 (1).java
范型参考 (2).java
暂时仅仅设计了以下几个功能点: 1.点对点单人聊天; 2.多人在线同时聊天; 3.用户可以自由加入和退出系统; 4.具备用户在线状态监听;
java 带两个类型参数的泛型 java 带两个类型参数的泛型
11、java范型测试 12、常用JUC类:CountDownloadLatch,CylicBarrier、ReetrantLock等测试案例 13、自定义封装的并发工具类:ConcurrentAction 14、自定义限流注解和其他工具注解 15、AQS队列学习总结和测试 16、CAS...
消息传递范型与C/S范型双范型的主数据管理机制,陈晓云,邢乔金,本文针对主数据管理(MDM)存在的问题提出了一种基于消息传递机制范型与C/S范型双范型的主数据管理机制,当各个分系统的数据有所变化�
C++多范型设计,ISBN:9787508318240,作者:(美)James O.Coplien著;鄢爱兰,周辉等译;鄢爱兰译