一般情况下,泛型最通常应用于集合,如set和Map,以及单元素的容器,如ThreadLocal等。在这些语法中一般情况下,这些容器都被充当被参数化了的容器,意味着每个容器只能有一个或者多个固定数目的类型参数。如一个Set只有一个类型参数,用于表示元素类型。一个Map有两个类型参数,表示它的键和值类型。(个人认为类型参数就是指定了类型的参数。这也是泛型的意义所在)
但是有时候我们可能需要更多的灵活性,比如数据库行可以有任意多的列,每个列的类型可能不一样,如果能以类型安全的方式访问所有列就好了。目前,有一种方法可以实现,就是将键值(key)进行参数化而不是对整个容器进行参数化。然后将参数化的键值提交给容器,来插入或者获取值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Favorite {
/**
* 注意这个地方Map的key进行了参数化,而非是Map本身
*/
private Map<Class<?>,Object> map = new HashMap<Class<?>, Object>();
private Map<List<?>,Object> map2 = new HashMap<List<?>, Object>();
public <E> void add(Class<E> type,E instance) {
if (type!= null ) {
map.put(type, instance);
}
}
public <E> void add(List<E> type,E instance) {
if (type!= null ) {
map2.put(type, instance);
}
}
public <E> E get (Class<E> type) {
Object object = map. get (type);
return type.cast( object );
}
public static void main(String[] args) {
Favorite f = new Favorite();
f.add(String. class , "string" ); //可以插入String类型
f.add(Integer. class , Integer.valueOf(123)); //可以插入int类型
f.add( new ArrayList<String>(), "String" ); //可以插入String类型
f.add( new ArrayList<Integer>(), 123); //可以插入int类型
String s1 = f. get (String. class );
Integer i = f. get (Integer. class );
System. out .println(s1);
System. out .println(i);
}
} |
上面的例子就是实现了一个可以指定多个类型的插入和读取,且是类型安全的。
这个例子需要注意的是
private Map<Class<?>,Object> map = new HashMap<Class<?>, Object>();
每个Favorite实例都得到一个被称作map的私有
Map<Class<?>,Object>
的支持。开始的时候,我们可能会将不能将任何东西放入到这个Map中去,因为其实无限制通配符,但是其实事实正好相反,我们可以删除任意类型的数据,原因是因为这个通配符是嵌套的,它不是属于通配符类型的Map的类型,而是他的key的类型。由此可见,每个键都可以有一个不同的参数化类型,本示例中Class<String> Class<Integer>。
相关推荐
为解决基于Docker容器的应用跨异构容器云迁移的问题,针对主流的异构容器编排引擎的编排原理进行了研究,同时也研究了主流容器服务提供商之间的异构性,在此基础上提出了基于Docker容器的应用跨异构容器云迁移的三层...
了解安全容器在边缘 K8s 中的架构和优秀实践,如何让安全容器的使用体感像 runc 容器一样简单; 了解安全容器在落地过程中在网络、监控、日志、存储以及 K8s API 兼容等方面遇到的种种困难和挑战以及解决方案。
异构数据库中的数据类型转换, 异构数据库中的数据类型转换论文
本文主要研究基于异构数据库的网络信息安全问题,在异构数据转换过程中要保证数据一致性、不可抵赖性、安全性、合法性。在大型企业中异构数据库的存在已经很广泛,所以异构数据库间信息的交换信息是不可避免的,信息...
共生网络——异构网络安全高效互联的体系结构与机理.docx
异构环境下无线传感大数据跨域传输安全控制系统设计.pdf
《异构众核系统》该篇论文由西交大的巨涛、朱正东、董小社所写。他们首先从不同方面分析对比了当前不同异构系统的特点,揭示了异构众核系统相对传统多核并行系统的优势及其发展趋势。然后分析了异构系统编程模型以及...
异构数据库中不同数据类型属性的匹配研究,张闯,刘万军,在目前异构数据库属性的匹配方法中,不管是基于规则的属性匹配方法还是基于BP神经网络的属性匹配方法,相似属性识别和匹配的根据�
#资源达人分享计划#
基于海量异构数据的网络安全态势感知研究.pdf
面向大数据的异构网络安全监控及关联算法.pdf
异构信息交换论文异构信息交换论文异构信息交换论文异构信息交换论文异构信息交换论文异构信息交换论文异构信息交换论文
异构系统WS调用异构系统WS调用异构系统WS调用异构系统WS调用
为了分析安全事件对网络的影响,准确、全面地评估系统的安全态势,并迅速找出系统中的最薄弱环节,提出一种基于多源异构传感器的网络安全态势评估模型。首先,运用改进的DS融合规则结合AHP算法对多传感器提交的安全...
能够很好仿真异构网络,-是参考文献的较好选择,基于NS2.29
基于异构数据融合的政务网络安全监测平台设计与实现.pdf
SOA异构系统交互指南 SOA异构系统交互指南 SOA异构系统交互指南
基于容器的异构空间信息处理算子服务发布方法.docx
容器云中基于Stackelberg博弈的动态异构调度方法.docx
异构无线网络垂直切换 matlab仿真实现