上篇主要将<D>和<D extends List>这类范型变量定义
而<>中如果是具体的某个类或者是?之类的就不是范型变量定义了,比如<String[]>,<String>,<? extends List>.比方说以下代码
public class ClassA extends ClassB<String, String[], ? extends List, ClassC<String>> {
}
就ClassB<String, String[], ? super List, ClassC<String>>来说,对应的是ParameterizedType,这时候没有对范型变量的定义了,而是把那些范型定义中的大写字母实例化成了具体的Type。TypeVariable<D>和ParameterizedType就像类和实例间的关系。
如果只是单独的ClassB,没有任何<>,那么它就对应普通的Class类,普通类也是Type的一种。
当我们调用
Class.getGenericSuperClass
Class.getGenericInterfaces
Method.getGenericExceptionTypes
Method.getGenericParameterTypes
Method.getGenericReturnType
Constructor.getGenericExceptionTypes
Constructor.getGenericParameterTypes
都会返回Type对象或者Type数组,这些Type有可能ParameterizedType, Class, GenericArrayType中的一种,需要进行运行时类型检查,然后在强制转型做处理。这里是WildcardType可能性不大,毕竟无论是超类,接口,方法入参,返回值和异常都不可能用?通配符这种WildcardType.
如果使用ClassA.getGenericSuperClass()方法返回的type,检查后就会转型成ParameterizedType。然后可以通过ParameterizedType.getActualTypeArguments再得到一个Type数组,这些type数组对应的就是String, String[], ? super List, ClassC<String>,四种范型。
进一步,ClassB中的四个范型变量的实例,分别是
String,对应Class,
String[],对应GenericArrayType
? extends List,对应WildcardType
ClassC<String>,又对应ParameterizeType
这些都是要通过运行时类型检查来判断他们到底是什么样的Type
拿到Class,那么该干嘛干嘛,不用多说
当我们拿到的是GenericArrayType,那么对应的就是一个数组,可以通过getGenericComponentType方法拿到实际定义数组的类型,返回的Type可能是Class,ParameterizeType继续做检查然后再转型吧,当然也是有肯能是GenericArrayType,比如二维数组。
当我们拿到的是WildcardType,可以通过getLowerBounds和getSuperBounds来获取?对应的上下边界Type,这里拿到的Type也是不确定需要做检查的,可能的类型包括Class,ParameterizeType, 或者GenericArrayType,WildcardType应该不会出现。
当我们拿到的是ParameterizeType,那么可以通过getActualTypeArguments进一步获取ClassC<Stirng>中的参数String.class(其实还是Type经过检查获取的),也可以通过getRawType拿到ClassC.class
总之这么一层一层的下去,不停的通过各种方法获取Type和Type数组,然后判定是那一种Type,再继续处理。但不太可能拿到的Type是TypeVariable<D>了。所以对于整个范型模型的理解层次,我觉得
最高自然是Type,
接下去是GenericDeclaration和TypeVariable<D>
最下层是ParameterizedType,Class,GenericArrayType,WildcardType
实际上可能ParameterizedType,Class比后两者略高
分享到:
相关推荐
### 分布式系统原理与范型...以上是对《分布式系统原理与范型--(第二版)》中第一章和第二章内容的知识点总结。通过这些内容的学习,可以更好地理解分布式系统的组成、原理及其关键特性,为后续深入研究打下坚实的基础。
分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版)
第2~9章讨论的是分布式系统的的原理、概念和技术,包括通信、进程、命名、同步化、一致性和复制、容错性以及安全性等,而分布式应用的开发方法(即范型)在第10~13章中进行了讨论。但是,与前一版不同的是,我们...
2. 范型的边界 - 上界通配符:使用extends关键字,例如`? extends Number`,表示类型参数可以是Number或其任何子类。 - 下界通配符:使用super关键字,例如`? super Integer`,表示类型参数可以是Integer或其任何...
本文提出的基于消息传递范型和客户机/服务器(Client/Server,简称C/S)范型双范型的主数据管理机制,能够有效解决MDM面临的问题。 消息传递范型是计算机科学中的一个基本概念,用于描述进程间通信的方式。在这范型...
华中科技大学 分布式系统原理与范型_考试_2009_答案
《C++多范型设计》是一本深入探讨C++编程语言中模板技术的专著,由知名软件工程师James O. Coplien撰写,并由鄢爱兰、周辉等翻译成中文版,ISBN号为9787508318240。这本书的核心主题是C++中的泛型编程,它是C++编程...
《七周七语言:理解多种编程范型》共介绍了七种不同的编程语言。对于每种语言,分别介绍了各自的特性、应用,以及编程入门知识和关键编程范型,还带领读者使用能够代表该语言最重要特性的技术,解决某个不寻常的问题...
2. 迭代器(Iterators):迭代器是STL中的关键概念,它像指针一样指向容器中的元素,但提供了更多的操作,如前移、后移、访问元素等。迭代器使得算法可以独立于容器,从而增强了代码的可复用性。 3. 算法...
2. **泛型支持**:允许存储多种数据类型,如整数、字符串、浮点数等,甚至包括自定义对象。 3. **数组常量功能**:利用 Delphi 4 引入的 `array of const`,简化程序员的工作,提高了代码的可读性和可维护性。 4. **...
分布式系统原理与范型(第2版)。电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍。
2. 对等网络(Peer-to-Peer, P2P):在P2P网络中,每个节点既是服务的消费者也是服务的提供者,具有良好的可扩展性和自我修复能力。 3. 微服务架构:将大型应用程序分解为一组小型、独立的服务,每个服务都可以独立...
分布式系统原理与范型中的命名系统是构建大规模网络服务的核心组成部分。命名系统允许在分布式环境中对资源进行标识、定位和访问。在这个系统中,"命名"是指为系统内的实体分配一个标识符,使得这些实体可以被其他...
分布式系统原理与范型是计算机科学中的一个重要领域,它涵盖了多台计算机如何通过网络协同工作,以实现一个共同的目标。《分布式系统原理与范型(第二版)》这本书深入浅出地介绍了这一主题,旨在帮助读者理解分布式...
这样的结构既保证了对基础理论的充分覆盖,也兼顾了对实际应用的深入分析。 为适应中国高等教育对课程内容改革和教材更新的需求,清华大学出版社经由培生教育出版集团授权,影印出版了此书的中文版。这一举措旨在...
2. **核心原理**: - **透明性**:如位置透明性、复制透明性等,使用户感觉不到资源是在分布式环境中。 - **一致性模型**:包括强一致性、弱一致性、最终一致性等,确保数据在不同节点间的一致状态。 - **容错...
2. **分布式系统的核心特性**: - **透明性**:用户应感觉不到系统的分布性,如位置透明性、复制透明性等。 - **并发控制**:处理多个节点同时操作同一资源的情况。 - **一致性与可用性**:CAP定理指出,分布式...
《分布式系统原理与范型》是分布式系统中的经典教材,全书分为两部分:原理和范型。第一部分详细讨论了分布式系统的原理、概念和技术,其中包括通信、进程、命名、同步、一致性和复制、容错以及安全。第二部分给出了...
在分析信息化进程中的软件范型演绎与智能体,我们首先需要了解软件范型这一概念。软件范型,指的是软件开发中采用的抽象模型和方法论,它反映了软件开发的一种哲学思考和理念。随着信息化进程中面临的主要问题的变化...