类 TypeInfo

java.lang.Object
cn.wjybxx.dsoncodec.TypeInfo

@Immutable public final class TypeInfo extends Object
类型信息

编码-有限泛型

由于Java是伪泛型,在运行时无法获得对象的完整类型信息,因此编码时无法总是精确写入完整的泛型参数信息; 如果字段的泛型参数在编译期是已知的,则APT可精确生成其类型信息,eg:Map<String, Task<Blackboard>

如果想尽可能精确的写入泛型信息,需要扩展GenericHelper

解码-完整泛型

虽然我们无法在运行时导出对象的完整的泛型信息,但编辑器可以 —— 编辑器中的泛型都是已构造泛型。 编辑器导出的Dson文件包含完整的泛型信息是有意义的,这使得我们在Java和C#端都可以精确解析Dson文件。 要精确解析Dson文件中的clsName,我们的TypeInfo必须和ClassName一样是递归的。

数组泛型信息

注意:由于Class.getComponentType()不包含泛型信息, 而我们需要这部分数据,因此我们将数组的泛型信息也存储在typeArgs中, 因此不能简单根据泛型参数个数判断是否是泛型类,请通过isConstructedGenericType()判断。 ps:数组不是泛型类。
作者:
wjybxx date 2023/3/31
  • 字段详细资料

    • rawType

      public final Class<?> rawType
      原始类型 -- 可能是基础类型
    • typeArgs

      public final List<TypeInfo> typeArgs
      泛型实参信息 -- 当不为0时,应当和真实泛型参数个数相同
    • OBJECT

      public static final TypeInfo OBJECT
    • STRING

      public static final TypeInfo STRING
    • INT

      public static final TypeInfo INT
    • LONG

      public static final TypeInfo LONG
    • FLOAT

      public static final TypeInfo FLOAT
    • DOUBLE

      public static final TypeInfo DOUBLE
    • BOOL

      public static final TypeInfo BOOL
    • SHORT

      public static final TypeInfo SHORT
    • BYTE

      public static final TypeInfo BYTE
    • CHAR

      public static final TypeInfo CHAR
    • VOID

      public static final TypeInfo VOID
    • BOXED_INT

      public static final TypeInfo BOXED_INT
    • BOXED_LONG

      public static final TypeInfo BOXED_LONG
    • BOXED_FLOAT

      public static final TypeInfo BOXED_FLOAT
    • BOXED_DOUBLE

      public static final TypeInfo BOXED_DOUBLE
    • BOXED_BOOL

      public static final TypeInfo BOXED_BOOL
    • BOXED_SHORT

      public static final TypeInfo BOXED_SHORT
    • BOXED_BYTE

      public static final TypeInfo BOXED_BYTE
    • BOXED_CHAR

      public static final TypeInfo BOXED_CHAR
    • BOXED_VOID

      public static final TypeInfo BOXED_VOID
    • ARRAY_INT

      public static final TypeInfo ARRAY_INT
    • ARRAY_LONG

      public static final TypeInfo ARRAY_LONG
    • ARRAY_FLOAT

      public static final TypeInfo ARRAY_FLOAT
    • ARRAY_DOUBLE

      public static final TypeInfo ARRAY_DOUBLE
    • ARRAY_BOOL

      public static final TypeInfo ARRAY_BOOL
    • ARRAY_SHORT

      public static final TypeInfo ARRAY_SHORT
    • ARRAY_BYTE

      public static final TypeInfo ARRAY_BYTE
    • ARRAY_CHAR

      public static final TypeInfo ARRAY_CHAR
    • ARRAY_STRING

      public static final TypeInfo ARRAY_STRING
    • ARRAY_OBJECT

      public static final TypeInfo ARRAY_OBJECT
    • ARRAYLIST

      public static final TypeInfo ARRAYLIST
    • LINKED_HASHSET

      public static final TypeInfo LINKED_HASHSET
    • HASHMAP

      public static final TypeInfo HASHMAP
    • STRING_HASHMAP

      public static final TypeInfo STRING_HASHMAP
    • LINKED_HASHMAP

      public static final TypeInfo LINKED_HASHMAP
    • STRING_LINKED_HASHMAP

      public static final TypeInfo STRING_LINKED_HASHMAP
  • 方法详细资料

    • isPrimitive

      public boolean isPrimitive()
      是否是基础类型
    • box

      public TypeInfo box()
      基础类型装箱
    • isEnum

      public boolean isEnum()
      是否是枚举
    • hasTypeArgs

      public boolean hasTypeArgs()
      是否包含泛型参数
    • isGenericType

      public boolean isGenericType()
      是否是泛型类 -- 不适用数组
    • isConstructedGenericType

      public boolean isConstructedGenericType()
      是否是已构造泛型类 -- 不适用数组
    • getTypeArg

      public TypeInfo getTypeArg(int idx)
      获取指定下标实参
    • isArrayType

      public boolean isArrayType()
      是否是数组
    • getArrayRank

      public int getArrayRank()
      获取数组的阶数 -- 非数组返回0
    • isConstructedGenericArrayType

      public boolean isConstructedGenericArrayType()
      是否是已构造泛型数组
    • getComponentType

      public TypeInfo getComponentType()
      获取数组的元素类型
    • getRootComponentType

      public TypeInfo getRootComponentType()
      获取最底层数组的元素类型
    • makeArrayType

      public TypeInfo makeArrayType()
      构建数组类型
    • makeArrayType

      public TypeInfo makeArrayType(int rank)
      构建数组类型 -- 可用于减少中间对象
    • equals

      public boolean equals(Object o)
      覆盖:
      equals 在类中 Object
    • equals

      public boolean equals(TypeInfo that)
      避免走到不必要的重载
    • hashCode

      public int hashCode()
      覆盖:
      hashCode 在类中 Object
    • toString

      public String toString()
      覆盖:
      toString 在类中 Object
    • of

      public static TypeInfo of(Class<?> rawType)
    • of

      public static TypeInfo of(Class<?> rawType, TypeInfo typeArg1)
    • of

      public static TypeInfo of(Class<?> rawType, TypeInfo typeArg1, TypeInfo typeArg2)
    • of

      public static TypeInfo of(Class<?> rawType, TypeInfo... typeArgs)
    • of

      public static TypeInfo of(Class<?> rawType, List<TypeInfo> typeArgs)
    • of

      public static TypeInfo of(Class<?> rawType, List<TypeInfo> typeArgs, TypeInfo typeArg1)
      用于继承其它类型的泛型参数
    • of

      public static TypeInfo of(Class<?> rawType, List<TypeInfo> typeArgs, TypeInfo typeArg1, TypeInfo typeArg2)
      用于继承其它类型的泛型参数
    • of

      public static TypeInfo of(Class<?> rawType, Class<?> typeArg1)
    • of

      public static TypeInfo of(Class<?> rawType, Class<?> typeArg1, Class<?> typeArg2)
    • of

      public static TypeInfo of(Class<?> rawType, Class<?>... typeArgs)