Interface JavaType

All Superinterfaces:
HasName
All Known Subinterfaces:
JavaParameterizedType
All Known Implementing Classes:
JavaClass, JavaGenericArrayType, JavaTypeVariable, JavaWildcardType

@PublicAPI(usage=ACCESS) public interface JavaType extends HasName
Represents a general Java type. This can e.g. be a class like java.lang.String, a parameterized type like List<String> or a type variable like T.
Besides having a name and offering the possibility to being converted to an erasure (which is then always a raw class object) JavaType doesn't offer an extensive API. Instead, users can check a JavaType for being an instance of a concrete subtype (like JavaTypeVariable) and then cast it to the respective subclass (same as with Type of the Java Reflection API).
See Also:
  • Method Details

    • toErasure

      Converts this JavaType into the erased type (compare the Java Language Specification). In particular this will result in
      • the class itself, if this type is a JavaClass
      • the JavaClass equivalent to Object, if this type is an unbound JavaTypeVariable
      • the JavaClass equivalent to the erasure of the left most bound, if this type is a bound JavaTypeVariable
      • if this type is a JavaGenericArrayType, the erasure will be the JavaClass equivalent to the array type that has the erasure of the generic component type of this type as its component type; e.g. take the generic array type T[][] where T is unbound, then the erasure will be the array type Object[][]
    • getAllInvolvedRawTypes

      @PublicAPI(usage=ACCESS) Set<JavaClass> getAllInvolvedRawTypes()
      Returns the set of all raw types that are involved in this type. If this type is a JavaClass, then this method trivially returns only the class itself. If this type is a JavaParameterizedType, JavaTypeVariable, JavaWildcardType, etc., then this method returns all raw types involved in type arguments and upper and lower bounds recursively. If this type is an array type, then this method returns all raw types involved in the component type of the array type.

      Examples:
      For the parameterized type
      
       List<String>
      the result would be the classes [List, String].
      For the parameterized type
      
       Map<? extends Serializable, List<? super Integer[]>>
      the result would be [Map, Serializable, List, Integer].
      And for the type variable
      
       T extends List<? super Integer>
      the result would be [List, Integer].
      Thus, this method offers a quick way to determine all types a (possibly complex) type depends on.
      Returns:
      All raw types involved in this JavaType