Review Request: JDK-8209005: Lookup.unreflectSpecial fails for default methods when Lookup.findSpecial works

Daniel Fuchs daniel.fuchs at oracle.com
Wed Jul 31 09:57:40 UTC 2019


Hi Peter, Mandy,

On 31/07/2019 08:59, Peter Levart wrote:
> Hi,
> 
> I think Daniel is talking about the "dispatch" semantics of 
> unreflectSpecial here, right Daniel?

Yes, exactly!

> The findSpecial / unreflectSpecial is a MethodHandle equivalent for 
> bytecode instruction invokespecial (sans actual invoking). invokespecial 
> is typically used for implementing the super.method(args) Java 
> invocations. In that case, the superclass method is targeted - this is 
> not a virtual method dispatch like aMethod.invoke(this, arg*) - i.e. the 
> reflective invocation is always a virtual invocation (for non-private 
> methods). Likewise findSpecial and unreflectSpecial produce a 
> MethodHandle that dispatches to the method in the superclass (the 
> aMethod.getDeclatingClass() in case of unreflectSpecial) regardless of 
> whether that method is overridden in the subclass or not.

Thanks Peter, that's exactly what I wanted to say. Apologies for not
being clear enough.

best regards,

-- daniel

> 
> Regards, Peter



More information about the core-libs-dev mailing list