public interface Types
用来对类型进行操作的实用工具方法。
兼容性注意事项: 在将来的平台版本中可能会向此接口添加一些方法。
ProcessingEnvironment.getTypeUtils()
方法摘要 | |
---|---|
Element |
asElement(TypeMirror t) 返回对应于类型的元素。 |
TypeMirror |
asMemberOf(DeclaredType containing, Element element) 当元素被视为给定类型的成员或者直接由给定类型包含时,返回该元素的类型。 |
TypeElement |
boxedClass(PrimitiveType p) 返回给定基本类型的装箱 (boxed) 值类型的类。 |
TypeMirror |
capture(TypeMirror t) 对类型应用 capture 转换。 |
boolean |
contains(TypeMirror t1, TypeMirror t2) 测试一个类型参数是否包含 另一个类型参数。 |
List<? extends TypeMirror> |
directSupertypes(TypeMirror t) 返回类型的直接超类型。 |
TypeMirror |
erasure(TypeMirror t) 返回删除状态的类型。 |
ArrayType |
getArrayType(TypeMirror componentType) 返回具有指定组件类型的数组类型。 |
DeclaredType |
getDeclaredType(DeclaredType containing, TypeElement typeElem, TypeMirror... typeArgs) 根据给定的包含类型,返回对应于类型元素和实际类型参数的类型(它是给定包含类型的成员)。 |
DeclaredType |
getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs) 返回对应于类型元素和实际类型参数的类型。 |
NoType |
getNoType(TypeKind kind) 返回在实际类型不适用的地方所使用的伪类型。 |
NullType |
getNullType() 返回 null 类型。 |
PrimitiveType |
getPrimitiveType(TypeKind kind) 返回基本类型。 |
WildcardType |
getWildcardType(TypeMirror extendsBound, TypeMirror superBound) 返回新的通配符类型参数。 |
boolean |
isAssignable(TypeMirror t1, TypeMirror t2) 测试一种类型是否可以指派给另一种类型。 |
boolean |
isSameType(TypeMirror t1, TypeMirror t2) 测试两个 TypeMirror 对象是否表示同一类型。 |
boolean |
isSubsignature(ExecutableType m1, ExecutableType m2) 测试一个方法的签名是否是另一个方法的子签名。 |
boolean |
isSubtype(TypeMirror t1, TypeMirror t2) 测试一种类型是否是另一个类型的子类型。 |
PrimitiveType |
unboxedType(TypeMirror t) 返回给定类型的拆箱 (unboxed) 值类型(基本类型)。 |
方法详细信息 |
---|
Element asElement(TypeMirror t)
DeclaredType
或
TypeVariable
。如果该类型没有对应元素,则返回
null
。
boolean isSameType(TypeMirror t1, TypeMirror t2)
TypeMirror
对象是否表示同一类型。
警告:如果此方法两个参数中有一个表示通配符,那么此方法将返回 false。因此,通配符与其本身的类型不同。初看起来这可能让人感到很奇怪,但考虑到编译器一定会拒绝以下示例时,这就很合理了:
List<?> list = new ArrayList<Object>();
list.add(list.get(0));
t1
- 第一种类型
t2
- 第二种类型
true
boolean isSubtype(TypeMirror t1, TypeMirror t2)
t1
- 第一种类型
t2
- 第二种类型
true
IllegalArgumentException
- 如果给定一个 executable 或 package 类型
boolean isAssignable(TypeMirror t1, TypeMirror t2)
t1
- 第一种类型
t2
- 第二种类型
true
IllegalArgumentException
- 如果给定一个 executable 或 package 类型
boolean contains(TypeMirror t1, TypeMirror t2)
t1
- 第一种类型
t2
- 第二种类型
true
IllegalArgumentException
- 如果给定一个 executable 或 package 类型
boolean isSubsignature(ExecutableType m1, ExecutableType m2)
m1
- 第一个方法
m2
- 第二个方法
true
List<? extends TypeMirror> directSupertypes(TypeMirror t)
t
- 将被检查的类型
IllegalArgumentException
- 如果给定一个 executable 或 package 类型
TypeMirror erasure(TypeMirror t)
t
- 要删除的类型
IllegalArgumentException
- 如果给定一个 package 类型
TypeElement boxedClass(PrimitiveType p)
p
- 要转换的基本类型
p
的装箱值类型的类
PrimitiveType unboxedType(TypeMirror t)
t
- 要拆箱的类型
t
的拆箱值类型
IllegalArgumentException
- 如果给定类型无法进行 unboxing 转换
TypeMirror capture(TypeMirror t)
t
- 要转换的类型
IllegalArgumentException
- 如果给定 executable 或 package 类型
PrimitiveType getPrimitiveType(TypeKind kind)
kind
- 要返回的基本类型的种类
IllegalArgumentException
- 如果
kind
不是基本种类
NullType getNullType()
null
的类型。
NoType getNoType(TypeKind kind)
VOID
或
NONE
。对于包,可以使用
Elements.getPackageElement(CharSequence)
.asType()
替代。
kind
- 要返回的类型的种类
VOID
或
NONE
的伪类型
IllegalArgumentException
- 如果
kind
无效
ArrayType getArrayType(TypeMirror componentType)
componentType
- 组件类型
IllegalArgumentException
- 如果组件类型对于数组无效
WildcardType getWildcardType(TypeMirror extendsBound, TypeMirror superBound)
extendsBound
- 扩展(上)边界;如果没有,则该参数为
null
superBound
- 超(下)边界;如果没有,则该参数为
null
IllegalArgumentException
- 如果边界无效
DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs)
Set
的类型元素和
String
的类型镜像,那么可以使用此方法获取参数化类型
Set<String>
。
类型参数的数量必须等于类型元素的形式类型参数的数量,或者等于 0。如果等于 0,并且类型元素是泛型,则返回该类型元素的原始类型。
如果返回一个参数化类型,则其类型元素不得包含在一般外部类中。例如,首先使用此方法获取类型 Outer<String>
,然后调用 getDeclaredType(DeclaredType, TypeElement, TypeMirror...)
,可以构造参数化类型 Outer<String>.Inner<Number>
。
typeElem
- 类型元素
typeArgs
- 实际类型参数
IllegalArgumentException
- 如果给定的类型参数太多或太少,或者提供不合适的类型参数或类型元素
DeclaredType getDeclaredType(DeclaredType containing, TypeElement typeElem, TypeMirror... typeArgs)
getDeclaredType(TypeElement, TypeMirror...)
获取类型
Outer<String>
,然后调用此方法,可以构造参数化类型
Outer<String>.Inner<Number>
。
如果包含类型是一个参数化类型,则类型参数的数量必须等于 typeElem
的形式类型参数的数量。如果包含类型不是参数化的,或者为 null
,则此方法等效于 getDeclaredType(typeElem, typeArgs)
。
containing
- 包含类型;如果没有,则该参数为
null
typeElem
- 类型元素
typeArgs
- 实际类型参数
IllegalArgumentException
- 如果给定的类型参数太多或太少,或者提供了不合适的类型参数、类型元素或包含类型
TypeMirror asMemberOf(DeclaredType containing, Element element)
Set<String>
的成员时,
Set.add
方法是参数类型为
String
的
ExecutableType
。
containing
- 包含类型
element
- 元素
IllegalArgumentException
- 如果元素对于给定类型无效