Interface TypeInfo
- All Known Subinterfaces:
ArrayTypeInfo,ClassInfo,PrimitiveTypeInfo
在一个支持泛型的语言 (例如 Java) 中, 如果仅从理论 (语义) 层面来看, 一个类型 (Type) 可以被视为「类型构造器」 (Type Constructor) 与「类型参数」 (Type Arguments) 的组合 :
Type = Type Constructor + Type Arguments
不过, 因为 Java 的泛型在实现层面采用了类型擦除 (Type Erasure), 所以我们无法完全按照此理论模型来表达 Java 中的类型系统.
同时, 理论上, 类型变量 (TypeVariable) 和通配符 (WildcardType) 并不是严格意义上的「类型」,
它们仅仅是 Java 泛型实现中为了描述占位或约束而引入的语法结构,
在一个完整, 可推导的类型系统中应被 消解为具体类型 或 通过上下文推导 得到, 不应长期存在.
为了构建一个更纯粹, 符合类型理论的类型体系, 本抽象不再包含 TypeVariable 和 WildcardType,
只保留如下三种核心子类型:
-
ClassInfo(具象类型)表示一个已具体化的, 完整的具体类型, 它更接近理论层面中定义的「Type」. 例如:
String,List<String>,Map<Integer, String>等. 在当前环境中 可以看作 「Class + 类型参数」. -
PrimitiveTypeInfo(基本类型)表示 Java 中的基本数据类型, 例如
int,long,boolean等. 由于它们在 Java 中的特殊性 (不是引用类型), 我们将其单独抽象出来. -
ArrayTypeInfo(数组类型)表示 数组类型, 例如
String[],int[]或T[](泛型数组)等. 因为数组在 Java 中是协变的, 且运行时保留元素类型信息 (不同于泛型的类型擦除), 我们将其单独抽象出来.
简要对照 Java 反射中的 Type 实现 :
Class / ParameterizedType --> ClassInfo
Class (isPrimitive = true) --> PrimitiveTypeInfo
GenericArrayType / Class (isArray = true) --> ArrayTypeInfo
TypeVariable --> 尝试推导或回退到上界 --> TypeInfo
WildcardType --> 回退到上界 --> TypeInfo
- Version:
- 0.0.1
- Author:
- scx567888
-
Method Summary
-
Method Details
-
rawClass
Class<?> rawClass()获取原始类
-