public interface Types
类型操作的实用方法。
兼容性注意: 未来版本的平台可能会添加方法到此接口。
- 自版本:
- 1.6
- 另请参见:
-
Method Summary
Modifier and TypeMethodDescription返回与类型对应的元素。asMemberOf
(DeclaredType containing, Element element) 当元素被视为给定类型的成员或直接包含在给定类型中时,返回元素的类型。返回基本类型参数的装箱值的类。对类型应用捕获转换。boolean
contains
(TypeMirror t1, TypeMirror t2) 测试一个类型参数是否包含另一个类型参数。List
<? extends TypeMirror> 返回类型的直接超类型。返回类型的擦除。getArrayType
(TypeMirror componentType) 返回具有指定组件类型的数组类型。getDeclaredType
(TypeElement typeElem, TypeMirror... typeArgs) 返回与类型元素和实际类型参数对应的类型。getDeclaredType
(DeclaredType containing, TypeElement typeElem, TypeMirror... typeArgs) 返回与类型元素和实际类型参数对应的类型,在给定其为成员的包含类型的情况下。返回在没有适当实际类型的情况下使用的伪类型。返回空类型。getPrimitiveType
(TypeKind kind) 返回原始类型。getWildcardType
(TypeMirror extendsBound, TypeMirror superBound) 返回新的通配符类型。boolean
isAssignable
(TypeMirror t1, TypeMirror t2) 测试一个类型是否可分配给另一个类型。boolean
isSameType
(TypeMirror t1, TypeMirror t2) 测试两个TypeMirror
对象是否表示相同类型。boolean
测试一个方法的签名是否是另一个方法的子签名。boolean
isSubtype
(TypeMirror t1, TypeMirror t2) 测试一个类型是否是另一个类型的子类型。返回给定类型的未装箱值的类型(原始类型)。
-
Method Details
-
asElement
返回与类型对应的元素。类型可以是以下之一:DeclaredType
TypeVariable
- 用于包或模块的伪类型
null
。不具有对应元素的类型包括:- 参数:
-
t
- 要映射到元素的类型 - 返回:
- 与给定类型对应的元素
-
isSameType
测试两个TypeMirror
对象是否表示相同类型。注意:如果此方法的任一参数表示通配符,则此方法将返回false。因此,通配符不是与自身相同类型。这一点起初可能令人惊讶,但一旦考虑到编译器必须拒绝这样的示例,就会变得合理:
List<?> list = new ArrayList<Object>();
list.add(list.get(0));
由于注解仅是与类型关联的元数据,因此在计算两个
TypeMirror
对象是否相同类型时,不考虑任一参数上的注解。特别地,两个TypeMirror
对象可以具有不同的注解,但仍被视为相同。- 参数:
-
t1
- 第一个类型 -
t2
- 第二个类型 - 返回:
-
如果两个类型相同,则返回
true
-
isSubtype
测试一个类型是否是另一个类型的子类型。任何类型都被视为其自身的子类型。- 参数:
-
t1
- 第一个类型 -
t2
- 第二个类型 - 返回:
-
如果第一个类型是第二个类型的子类型,则返回
true
- 抛出:
-
IllegalArgumentException
- 如果给定一个可执行、包或模块的类型 - 参见Java语言规范:
-
4.10 子类型
-
isAssignable
测试一个类型是否可分配给另一个类型。- 参数:
-
t1
- 第一个类型 -
t2
- 第二个类型 - 返回:
-
如果第一个类型可分配给第二个类型,则返回
true
- 抛出:
-
IllegalArgumentException
- 如果给定一个可执行、包或模块的类型 - 参见Java语言规范:
-
5.2 赋值上下文
-
contains
测试一个类型参数是否包含另一个类型参数。- 参数:
-
t1
- 第一个类型 -
t2
- 第二个类型 - 返回:
-
如果第一个类型包含第二个类型,则返回
true
- 抛出:
-
IllegalArgumentException
- 如果给定一个可执行、包或模块的类型 - 参见Java语言规范:
-
4.5.1 参数化类型的类型参数
-
isSubsignature
测试一个方法的签名是否是另一个方法的子签名。- 参数:
-
m1
- 第一个方法 -
m2
- 第二个方法 - 返回:
-
如果第一个签名是第二个签名的子签名,则返回
true
- 参见Java语言规范:
-
8.4.2 方法签名
-
directSupertypes
返回类型的直接超类型。如果有接口类型,则接口类型将出现在列表的最后。对于没有直接超接口的接口类型,将返回表示java.lang.Object
的类型镜像。类型java.lang.Object
没有直接超类型(JLS 8.1.4,8.1.5),因此对于表示java.lang.Object
的类型镜像的直接超类型,将返回空列表。- 参数:
-
t
- 正在检查的类型 - 返回:
- 直接超类型,如果没有则返回空列表
- 抛出:
-
IllegalArgumentException
- 如果给定一个可执行、包或模块的类型 - 参见Java语言规范:
-
4.10 子类型
-
erasure
返回类型的擦除。- 参数:
-
t
- 要擦除的类型 - 返回:
- 类型的擦除
- 抛出:
-
IllegalArgumentException
- 如果给定一个包或模块的类型 - 参见Java语言规范:
-
4.6 类型擦除
-
boxedClass
返回基本类型参数的装箱值的类。即,应用装箱转换。- 参数:
-
p
- 要转换的基本类型 - 返回:
- 基本类型参数的装箱值的类
- 参见Java语言规范:
-
5.1.7 装箱转换
-
unboxedType
返回给定类型的未装箱值的类型(基本类型)。即,应用拆箱转换。- 参数:
-
t
- 要拆箱的类型 - 返回:
-
类型
t
的未装箱值的类型 - 抛出:
-
IllegalArgumentException
- 如果给定类型没有拆箱转换 - 参见Java语言规范:
-
5.1.8 拆箱转换
-
capture
对类型应用捕获转换。- 参数:
-
t
- 要转换的类型 - 返回:
- 应用捕获转换的结果
- 抛出:
-
IllegalArgumentException
- 如果给定一个可执行、包或模块的类型 - 参见Java语言规范:
-
5.1.10 捕获转换
-
getPrimitiveType
返回原始类型。- 参数:
-
kind
- 要返回的原始类型的种类 - 返回:
- 原始类型
- 抛出:
-
IllegalArgumentException
- 如果kind
不是原始种类
-
getNullType
NullType getNullType()返回空类型。这是null
的类型。- 返回:
- 空类型
-
getNoType
返回一个伪类型,用于在没有实际类型适用的情况下使用。要返回的类型可能是VOID
或NONE
。要获取与包或模块对应的伪类型,请在表示包或模块的元素上调用
asType()
。可以使用Elements.getPackageElement(CharSequence)
或Elements.getModuleElement(CharSequence)
将名称转换为包或模块的元素。- 参数:
-
kind
- 要返回的类型的种类 - 返回:
-
一种
VOID
或NONE
的伪类型 - 抛出:
-
IllegalArgumentException
- 如果kind
无效
-
getArrayType
返回具有指定组件类型的数组类型。- 参数:
-
componentType
- 组件类型 - 返回:
- 具有指定组件类型的数组类型
- 抛出:
-
IllegalArgumentException
- 如果组件类型对于数组无效
-
getWildcardType
返回一个新的通配符类型。通配符的边界可以指定为extends(上界),或者为super(下界),但不能同时指定。- 参数:
-
extendsBound
- extends(上界),如果没有则为null
-
superBound
- super(下界),如果没有则为null
- 返回:
- 一个新的通配符类型
- 抛出:
-
IllegalArgumentException
- 如果边界无效
-
getDeclaredType
返回与类型元素和实际类型参数对应的类型。例如,给定Set
的类型元素和String
的类型镜像,可以使用此方法获取参数化类型Set<String>
。类型参数的数量必须等于类型元素的形式类型参数的数量,或者必须为零。如果为零,并且类型元素是泛型的,则返回类型元素的原始类型。
如果正在返回参数化类型,则其类型元素不能包含在泛型外部类中。例如,可以通过首先使用此方法获取类型
Outer<String>
,然后调用getDeclaredType(DeclaredType, TypeElement, TypeMirror...)
来构造参数化类型Outer<String>.Inner<Number>
。- 参数:
-
typeElem
- 类型元素 -
typeArgs
- 实际类型参数 - 返回:
- 与类型元素和实际类型参数对应的类型
- 抛出:
-
IllegalArgumentException
- 如果给定了太多或太少的类型参数,或者提供了不合适的类型参数或类型元素
-
getDeclaredType
返回与类型元素和实际类型参数对应的类型,在其为成员的包含类型给定的情况下。例如,可以通过首先使用getDeclaredType(TypeElement, TypeMirror...)
获取类型Outer<String>
,然后调用此方法来构造参数化类型Outer<String>.Inner<Number>
。如果包含类型是参数化类型,则类型参数的数量必须等于
typeElem
的形式类型参数的数量。如果它不是参数化的或为null
,则此方法等效于getDeclaredType(typeElem, typeArgs)
。- 参数:
-
containing
- 包含类型,如果没有则为null
-
typeElem
- 类型元素 -
typeArgs
- 实际类型参数 - 返回:
- 与类型元素和实际类型参数对应的类型,在给定类型内包含
- 抛出:
-
IllegalArgumentException
- 如果给定了太多或太少的类型参数,或者提供了不合适的类型参数、类型元素或包含类型
-
asMemberOf
返回元素的类型,当该元素被视为给定类型的成员或直接包含时。例如,当作为参数化类型Set<String>
的成员查看时,Set.add
方法是一个ExecutableType
,其参数类型为String
。- 参数:
-
containing
- 包含类型 -
element
- 元素 - 返回:
- 从包含类型视角查看的元素的类型
- 抛出:
-
IllegalArgumentException
- 如果元素对于给定类型无效
-