一般情况下,泛型最通常应用于集合,如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>。
相关推荐
了解安全容器在边缘 K8s 中的架构和优秀实践,如何让安全容器的使用体感像 runc 容器一样简单; 了解安全容器在落地过程中在网络、监控、日志、存储以及 K8s API 兼容等方面遇到的种种困难和挑战以及解决方案。
异构数据库中的数据类型转换, 异构数据库中的数据类型转换论文
除了上述提到的加密技术和数字签名技术之外,还需要考虑其他方面的安全措施,如防火墙设置、访问控制策略等。通过综合运用这些技术,可以在很大程度上降低数据泄露和篡改的风险。 #### 5. 性能分析 为了评估所提出...
### 共生网络:异构网络安全高效互联的体系结构与机理 #### 一、引言及背景 共生网络的概念提出旨在解决当前多种网络体制并存环境下存在的互联问题。随着通信技术的发展,出现了多种网络形态,包括但不限于车联网...
2. **安全加固与隔离技术**:传统的安全措施,如虚拟机加固和虚拟化层隔离,可以有效抵御某些类型的攻击,但在面对复杂多变的攻击时显得力不从心。 3. **动态防御策略**:近年来,研究人员开始探索基于动态防御的...
但是,根据文件的标题和描述,我们可以提炼出关于“基于海量异构数据的网络安全态势感知研究”的相关知识点。 网络安全态势感知是一种识别、评估和预测当前及未来网络安全威胁的方法和过程。在当前信息化高度发达的...
异构网络在现代通信系统中占据着至关重要的地位,它是指由不同类型的网络技术、设备、协议或节点组成的网络环境。这些差异可能体现在传输速度、带宽、覆盖范围、能量效率等多个方面。NS2(Network Simulator 2)是一...
在这样的背景下,异构网络安全监控系统对于保护网络安全具有非常重要的作用。异构网络安全监控不仅涉及传统的网络设备,还包括云服务、移动终端等多种网络元素,它们构成了一个异构的网络环境。这个环境带来了许多...
大数据融合分析技术能够处理海量的、高维度的异构数据,提取有价值的信息,帮助安全分析人员更好地理解网络安全态势,进行准确的威胁评估。 其次,平台需要实现多源数据的采集、集成接口和规范化处理。数据采集指的...
异构环境下无线传感大数据跨域传输安全控制系统的设计是一个集成了多种技术的复杂工程,旨在保障在不同环境下的无线传感网络传输数据时的安全性和高效性。文中提到了几个关键的技术点,以下是对这些技术点的详细解读...
通过安全矩阵的建立,能够使分布式异构存储网络在设计之初就考虑到了安全因素,从而在一定程度上降低安全风险。 接下来,文章探讨了系统结构的设计。在分布式异构存储网络系统中,需要支持不同的访问模式,如CIFS、...
"基于容器的异构空间信息处理算子服务发布方法" 本文提出了一种基于容器的异构空间信息处理算子服务发布方法,旨在解决当前 GIS 领域中空间信息处理算子的异构性和复杂的运行环境依赖问题。该方法通过自动化地将...
《异构众核系统》该篇论文由西交大的巨涛、朱正东、董小社所写。他们首先从不同方面分析对比了当前不同异构系统的特点,揭示了异构众核系统相对传统多核并行系统的优势及其发展趋势。然后分析了异构系统编程模型以及...
#资源达人分享计划#
在IT行业中,异构系统之间的通信是一个常见的挑战。"异构系统WS调用"这个话题主要涉及的是如何在不同架构、不同技术栈的...在设计和实施这样的解决方案时,我们需要充分考虑安全性、性能、互操作性和可维护性等因素。
传统的分布式异构存储网络安全技术面临诸多挑战,如存储安全系数较低,不能有效实现全面的网络安全保护。为解决这一问题,有研究者提出了面向网络安全的分布式异构存储网络安全技术研究。 首先,研究者尝试提取...
在异构数据的处理中,可能需要考虑数据的非线性关系。此外,对于大规模的数据集,简单的线性二乘法可能计算量巨大,效率低下。因此,对于多源异构数据挖掘算法,线性二乘法需要被进一步发展以适应异构数据的特点。 ...
在道路运输信息化建设中,异构信息交换的重要性尤为凸显,尤其在营运车辆安全监控管理方面。 随着我国信息化建设的推进,道路运输信息化建设也取得了显著成果,如建立了网络互联互通的基础设施和各级道路运输信息...