Class WildcardType

  • All Implemented Interfaces:
    Descriptor

    public class WildcardType
    extends Type
    Represents a generic wildcard. A generic wildcard can have either an upper (extends) or a lower (super) bound. A wildcard declared without a bound ("?") has a default extends bound of "java.lang.Object".
    Since:
    2.0
    • Field Detail

      • UNBOUNDED

        public static final WildcardType UNBOUNDED
        A wildcard without a bound, an equivalent of ?.
        Since:
        3.1.0
      • isExtends

        private final boolean isExtends
      • bound

        private final Type bound
      • hash

        private int hash
    • Constructor Detail

      • WildcardType

        WildcardType​(Type bound,
                     boolean isExtends)
    • Method Detail

      • create

        @Deprecated
        public static WildcardType create​(Type bound,
                                          boolean isExtends)
        Creates a new wildcard type.
        Parameters:
        bound - the bound (lower or upper)
        isExtends - true if the bound is an upper (extends) bound, false if lower (super)
        Returns:
        the new instance
        Since:
        2.1
      • createUpperBound

        public static WildcardType createUpperBound​(Type upperBound)
        Create a new wildcard type with an upper (extends) bound.
        Parameters:
        upperBound - the upper bound
        Returns:
        the new instance
        Since:
        3.1.0
      • createUpperBound

        public static WildcardType createUpperBound​(java.lang.Class<?> upperBound)
        Create a new wildcard type with an upper (extends) bound.
        Parameters:
        upperBound - the upper bound
        Returns:
        the new instance
        Since:
        3.1.0
      • createLowerBound

        public static WildcardType createLowerBound​(Type lowerBound)
        Create a new wildcard type with a lower (super) bound.
        Parameters:
        lowerBound - the lower bound
        Returns:
        the new instance
        Since:
        3.1.0
      • createLowerBound

        public static WildcardType createLowerBound​(java.lang.Class<?> lowerBound)
        Create a new wildcard type with a lower (super) bound.
        Parameters:
        lowerBound - the lower bound
        Returns:
        the new instance
        Since:
        3.1.0
      • builder

        public static WildcardType.Builder builder()
        Create a builder of a wildcard type.
        Returns:
        the builder
        Since:
        3.1.0
      • name

        public DotName name()
        Description copied from class: Type
        Returns the name of this type (or its erasure in case of generic types) as a DotName, using the Class.getName() format. Specifically:
        • for primitive types and the void pseudo-type, the corresponding Java keyword is returned (void, boolean, byte, short, int, long, float, double, char);
        • for class types, the binary name of the class is returned;
        • for array types, a string is returned that consists of one or more [ characters corresponding to the number of dimensions of the array type, followed by the element type as a single-character code for primitive types or Lbinary.name.of.TheClass; for class types (for example, [I for int[] or [[Ljava.lang.String; for String[][]);
        • for parameterized types, the binary name of the generic class is returned (for example, java.util.List for List<String>);
        • for type variables, the name of the first bound of the type variable is returned, or java.lang.Object for type variables that have no bound;
        • for wildcard types, the name of the upper bound is returned, or java.lang.Object if the wildcard type does not have an upper bound (for example, java.lang.Number for ? extends Number).
        Overrides:
        name in class Type
        Returns:
        the name of this type (or its erasure in case of generic types)
      • extendsBound

        public Type extendsBound()
        Returns the upper bound of this wildcard (e.g. SomeType for ? extends SomeType).

        Returns java.lang.Object if this wildcard declares a lower bound (? super SomeType).

        Returns:
        the upper bound, or Object if this wildcard has a lower bound
      • superBound

        public Type superBound()
        Returns the lower bound of this wildcard (e.g. SomeType for ? super SomeType).

        Returns null if this wildcard declares an upper bound (? extends SomeType).

        Returns:
        the lower bound, or null if this wildcard has an upper bound
      • bound

        Type bound()
      • isExtends

        boolean isExtends()
      • hasImplicitObjectBound

        boolean hasImplicitObjectBound()
      • kind

        public Type.Kind kind()
        Description copied from class: Type
        Returns the kind of Type this is.
        Specified by:
        kind in class Type
        Returns:
        the kind
      • copyType

        Type copyType​(Type bound)
      • toString

        java.lang.String toString​(boolean simple)
        Overrides:
        toString in class Type
      • equals

        public boolean equals​(java.lang.Object o)
        Description copied from class: Type
        Compares this Type with another type. A type is equal to another type if it is of the same kind, and all of their fields are equal. This includes annotations, which must be equal as well.
        Overrides:
        equals in class Type
        Parameters:
        o - the type to compare to
        Returns:
        true if equal
        See Also:
        Object.equals(Object)
      • hashCode

        public int hashCode()
        Description copied from class: Type
        Computes a hash code representing this type.
        Overrides:
        hashCode in class Type
        Returns:
        the hash code
      • internEquals

        boolean internEquals​(java.lang.Object o)
        Overrides:
        internEquals in class Type