Class Types.TypeVariableInvocationHandler
- All Implemented Interfaces:
InvocationHandler
- Enclosing class:
Types
Java 8 introduced a new method getAnnotatedBounds() in the TypeVariable
interface, whose return type AnnotatedType[] is also new in Java 8. That means that we
cannot implement that interface in source code in a way that will compile on both Java 7 and
Java 8. If we include the getAnnotatedBounds() method then its return type means it
won't compile on Java 7, while if we don't include the method then the compiler will complain
that an abstract method is unimplemented. So instead we use a dynamic proxy to get an
implementation. If the method being called on the TypeVariable instance has the same
name as one of the public methods of Types.TypeVariableImpl, the proxy calls the same method
on its instance of TypeVariableImpl. Otherwise it throws
UnsupportedOperationException; this should only apply to getAnnotatedBounds().
This does mean that users on Java 8 who obtain an instance of TypeVariable from
TypeResolver#resolveType will not be able to call getAnnotatedBounds() on it,
but that should hopefully be rare.
This workaround should be removed at a distant future time when we no longer support Java versions earlier than 8.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
-
Field Details
-
typeVariableMethods
-
typeVariableImpl
-
-
Constructor Details
-
TypeVariableInvocationHandler
TypeVariableInvocationHandler(Types.TypeVariableImpl<?> typeVariableImpl)
-
-
Method Details
-
invoke
- Specified by:
invokein interfaceInvocationHandler- Throws:
Throwable
-