Module java.compiler

Interface Types


public interface Types
类型操作的实用方法。

兼容性注意: 未来版本的平台可能会添加方法到此接口。

自版本:
1.6
另请参见:
  • Method Details

    • asElement

      Element asElement(TypeMirror t)
      返回与类型对应的元素。类型可以是以下之一: 如果类型不是具有对应元素的类型,则该方法返回null。不具有对应元素的类型包括:
      参数:
      t - 要映射到元素的类型
      返回:
      与给定类型对应的元素
    • isSameType

      boolean isSameType(TypeMirror t1, TypeMirror t2)
      测试两个TypeMirror对象是否表示相同类型。

      注意:如果此方法的任一参数表示通配符,则此方法将返回false。因此,通配符不是与自身相同类型。这一点起初可能令人惊讶,但一旦考虑到编译器必须拒绝这样的示例,就会变得合理:

         List<?> list = new ArrayList<Object>();
         list.add(list.get(0));
       

      由于注解仅是与类型关联的元数据,因此在计算两个TypeMirror对象是否相同类型时,不考虑任一参数上的注解。特别地,两个TypeMirror对象可以具有不同的注解,但仍被视为相同。

      参数:
      t1 - 第一个类型
      t2 - 第二个类型
      返回:
      如果两个类型相同,则返回true
    • isSubtype

      boolean isSubtype(TypeMirror t1, TypeMirror t2)
      测试一个类型是否是另一个类型的子类型。任何类型都被视为其自身的子类型。
      参数:
      t1 - 第一个类型
      t2 - 第二个类型
      返回:
      如果第一个类型是第二个类型的子类型,则返回true
      抛出:
      IllegalArgumentException - 如果给定一个可执行、包或模块的类型
      参见Java语言规范:
      4.10 子类型
    • isAssignable

      boolean isAssignable(TypeMirror t1, TypeMirror t2)
      测试一个类型是否可分配给另一个类型。
      参数:
      t1 - 第一个类型
      t2 - 第二个类型
      返回:
      如果第一个类型可分配给第二个类型,则返回true
      抛出:
      IllegalArgumentException - 如果给定一个可执行、包或模块的类型
      参见Java语言规范:
      5.2 赋值上下文
    • contains

      boolean contains(TypeMirror t1, TypeMirror t2)
      测试一个类型参数是否包含另一个类型参数。
      参数:
      t1 - 第一个类型
      t2 - 第二个类型
      返回:
      如果第一个类型包含第二个类型,则返回true
      抛出:
      IllegalArgumentException - 如果给定一个可执行、包或模块的类型
      参见Java语言规范:
      4.5.1 参数化类型的类型参数
    • isSubsignature

      boolean isSubsignature(ExecutableType m1, ExecutableType m2)
      测试一个方法的签名是否是另一个方法的子签名
      参数:
      m1 - 第一个方法
      m2 - 第二个方法
      返回:
      如果第一个签名是第二个签名的子签名,则返回true
      参见Java语言规范:
      8.4.2 方法签名
    • directSupertypes

      List<? extends TypeMirror> directSupertypes(TypeMirror t)
      返回类型的直接超类型。如果有接口类型,则接口类型将出现在列表的最后。对于没有直接超接口的接口类型,将返回表示java.lang.Object的类型镜像。类型java.lang.Object没有直接超类型(JLS 8.1.48.1.5),因此对于表示java.lang.Object的类型镜像的直接超类型,将返回空列表。
      参数:
      t - 正在检查的类型
      返回:
      直接超类型,如果没有则返回空列表
      抛出:
      IllegalArgumentException - 如果给定一个可执行、包或模块的类型
      参见Java语言规范:
      4.10 子类型
    • erasure

      TypeMirror erasure(TypeMirror t)
      返回类型的擦除。
      参数:
      t - 要擦除的类型
      返回:
      类型的擦除
      抛出:
      IllegalArgumentException - 如果给定一个包或模块的类型
      参见Java语言规范:
      4.6 类型擦除
    • boxedClass

      TypeElement boxedClass(PrimitiveType p)
      返回基本类型参数的装箱值的类。即,应用装箱转换
      参数:
      p - 要转换的基本类型
      返回:
      基本类型参数的装箱值的类
      参见Java语言规范:
      5.1.7 装箱转换
    • unboxedType

      PrimitiveType unboxedType(TypeMirror t)
      返回给定类型的未装箱值的类型(基本类型)。即,应用拆箱转换
      参数:
      t - 要拆箱的类型
      返回:
      类型t的未装箱值的类型
      抛出:
      IllegalArgumentException - 如果给定类型没有拆箱转换
      参见Java语言规范:
      5.1.8 拆箱转换
    • capture

      TypeMirror capture(TypeMirror t)
      对类型应用捕获转换。
      参数:
      t - 要转换的类型
      返回:
      应用捕获转换的结果
      抛出:
      IllegalArgumentException - 如果给定一个可执行、包或模块的类型
      参见Java语言规范:
      5.1.10 捕获转换
    • getPrimitiveType

      PrimitiveType getPrimitiveType(TypeKind kind)
      返回原始类型。
      参数:
      kind - 要返回的原始类型的种类
      返回:
      原始类型
      抛出:
      IllegalArgumentException - 如果kind不是原始种类
    • getNullType

      NullType getNullType()
      返回空类型。这是null的类型。
      返回:
      空类型
    • getNoType

      NoType getNoType(TypeKind kind)
      返回一个伪类型,用于在没有实际类型适用的情况下使用。要返回的类型可能是VOIDNONE

      要获取与包或模块对应的伪类型,请在表示模块的元素上调用asType()。可以使用Elements.getPackageElement(CharSequence)Elements.getModuleElement(CharSequence)将名称转换为包或模块的元素。

      参数:
      kind - 要返回的类型的种类
      返回:
      一种VOIDNONE的伪类型
      抛出:
      IllegalArgumentException - 如果kind无效
    • getArrayType

      ArrayType getArrayType(TypeMirror componentType)
      返回具有指定组件类型的数组类型。
      参数:
      componentType - 组件类型
      返回:
      具有指定组件类型的数组类型
      抛出:
      IllegalArgumentException - 如果组件类型对于数组无效
    • getWildcardType

      WildcardType getWildcardType(TypeMirror extendsBound, TypeMirror superBound)
      返回一个新的通配符类型。通配符的边界可以指定为extends(上界),或者为super(下界),但不能同时指定。
      参数:
      extendsBound - extends(上界),如果没有则为null
      superBound - super(下界),如果没有则为null
      返回:
      一个新的通配符类型
      抛出:
      IllegalArgumentException - 如果边界无效
    • getDeclaredType

      DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs)
      返回与类型元素和实际类型参数对应的类型。例如,给定Set的类型元素和String的类型镜像,可以使用此方法获取参数化类型Set<String>

      类型参数的数量必须等于类型元素的形式类型参数的数量,或者必须为零。如果为零,并且类型元素是泛型的,则返回类型元素的原始类型。

      如果正在返回参数化类型,则其类型元素不能包含在泛型外部类中。例如,可以通过首先使用此方法获取类型Outer<String>,然后调用getDeclaredType(DeclaredType, TypeElement, TypeMirror...)来构造参数化类型Outer<String>.Inner<Number>

      参数:
      typeElem - 类型元素
      typeArgs - 实际类型参数
      返回:
      与类型元素和实际类型参数对应的类型
      抛出:
      IllegalArgumentException - 如果给定了太多或太少的类型参数,或者提供了不合适的类型参数或类型元素
    • getDeclaredType

      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 - 如果给定了太多或太少的类型参数,或者提供了不合适的类型参数、类型元素或包含类型
    • asMemberOf

      TypeMirror asMemberOf(DeclaredType containing, Element element)
      返回元素的类型,当该元素被视为给定类型的成员或直接包含时。例如,当作为参数化类型Set<String>的成员查看时,Set.add方法是一个ExecutableType,其参数类型为String
      参数:
      containing - 包含类型
      element - 元素
      返回:
      从包含类型视角查看的元素的类型
      抛出:
      IllegalArgumentException - 如果元素对于给定类型无效