public abstract class TUConstraint extends Object
TU constraints come in the classic form of subtype, supertype, and equality constraints.
T <: U
-- implies T is a subtype of U, it is represented by TSubU T >: U
-- implies T is a supertype of U, it is represented by TSuperU T = U
-- implies T is equal to U, it is represented by TIsU Note, it is important that the type parameter is represented by an AnnotatedTypeVariable because if a use of the type parameter has a primary annotation, then the two types represented in by a TUConstraint are NOT constrained in the hierarchy of that annotation. e.g.
<T> void method(List<@NonNull T> t1, T t2)
method(new ArrayList<@NonNull String>(), null);
The above method call would eventually be reduced to constraints: [@NonNull String
== @NonNull T, @Nullable null <: T]
In this example, if we did not ignore the first constraint then the type argument would be exactly @NonNull String and the second argument would be invalid. However, the correct inference would be @Nullable String and both arguments would be valid.
Modifier and Type | Field and Description |
---|---|
int |
hashcodeBase |
AnnotatedTypeMirror |
relatedType
A type used to infer an argument for the typeVariable T.
|
AnnotatedTypeMirror.AnnotatedTypeVariable |
typeVariable
An AnnotatedTypeVariable representing a target type parameter for which we are inferring a
type argument.
|
Constructor and Description |
---|
TUConstraint(AnnotatedTypeMirror.AnnotatedTypeVariable typeVariable,
AnnotatedTypeMirror relatedType,
int hashcodeBase) |
public final AnnotatedTypeMirror.AnnotatedTypeVariable typeVariable
public final AnnotatedTypeMirror relatedType
public final int hashcodeBase
public TUConstraint(AnnotatedTypeMirror.AnnotatedTypeVariable typeVariable, AnnotatedTypeMirror relatedType, int hashcodeBase)