Signature of MethodHandleInfo.reflectAs is not specific enough

Remi Forax forax at univ-mlv.fr
Sun Nov 10 14:29:29 PST 2013


The is a stupid issue with the signature of MethodHandleInfo.reflectAs,
j.l.r.Field, Method or Constructor implement two interfaces Member and
AnnotatedElement, with the current signature, the code
   info.reflectAs(Member.class, lookup)
works but the code
   info.reflectAs(AnnotatedElement.class, lookup)
doesn't work.

Because there is no way to do an 'or' between several bounds of
a type variable, I think that the signature of reflectAs should be
changed from :
   public <T extends Member> T reflectAs(Class<T> expected, Lookup lookup);
to
   public <T> T reflectAs(Class<T> expected, Lookup lookup);

and the javadoc should be modified to explain that a Member or 
AnnotatedElement are
valid bounds of T.

As a side effect, the signature of MethodHandles.reflectAs(Class<T>, 
MethodHandle)
should be updated accordingly.

There is a workaround, one can write:
   (AnnotatedElement)info.reflectAs(Member.class, lookup)
but it's at best weird.

cheers,
Rémi



More information about the mlvm-dev mailing list