}
as well as raw types.
While a {@code TypeElement} represents a class or interface
element, a {@code DeclaredType} represents a class
or interface type, the latter being a use
(or invocation) of the former.
See {@link TypeElement} for more on this distinction.
The supertypes (both class and interface types) of a declared
type may be found using the {@link
Types#directSupertypes(TypeMirror)} method. This returns the
supertypes with any type arguments substituted in.
This interface is also used to represent intersection types.
An intersection type is implicit in a program rather than being
explictly declared. For example, the bound of the type parameter
{@code }
is an intersection type. It is represented by a {@code DeclaredType}
with {@code Number} as its superclass and {@code Runnable} as its
lone superinterface.