JDK 8 code review request for 8005042 Add Method.isDefault to core reflection
Peter Levart
peter.levart at gmail.com
Wed Dec 19 09:01:19 UTC 2012
On 12/19/2012 01:35 AM, David Holmes wrote:
> On 19/12/2012 10:24 AM, Joe Darcy wrote:
>> On 12/18/2012 04:20 PM, David Holmes wrote:
>>> On 19/12/2012 10:16 AM, Joe Darcy wrote:
>>>> On 12/18/2012 04:12 PM, David Holmes wrote:
>>>>> On 19/12/2012 8:40 AM, Louis Wasserman wrote:
>>>>>> It's not 100% obvious to me whether this refers to a default
>>>>>> implementation
>>>>>> in an interface, a class which inherits that default implementation
>>>>>> and does not override it, or both. Is that worth clarifying in
>>>>>> the doc,
>>>>>> rather than forcing readers to check the JLS citation?
>>>>>
>>>>> The issue is where you obtained this Method reference from:
>>>>>
>>>>> - from the Interface? then it is a default method
>>>>> - from a class implementing the interface but not redefining the
>>>>> method? then it is a default method
>>>>
>>>> Actually, that is *now* how HotSpot represents this case in core
>>>> reflection at the moment. HotSpot uses a new method object to
>>>> represent
>>>> the default method woven into an implementing class.
>>>
>>> *now* -> *not* ??
>>
>> Correct.
>>
>>>
>>> It may be a new Method object but getDeclaringClass() should give the
>>> interface class NOT the concrete class. That is currently the case for
>>> abstract interface methods. I hope it is the same for default methods!
>>
>> It is not at the moment, which is a bit surprising.
>
> Very surprising! I'd call that a major bug.
Not only default methods, also abstract interface methods show-up in the
implementing class's declared methods. For example the following test:
public class DefaultMethodsTest {
public interface I {
void i();
default void d() { }
}
public abstract static class S {
public abstract void a();
public void s() { }
}
public abstract static class C extends S implements I {
public void c() { }
}
public static void main(String[] args) {
for (Method m : C.class.getDeclaredMethods())
System.out.println(m.getName());
}
}
prints:
c
i
d
Regards, Peter
>
> David
> -----
>
>
>> -Joe
More information about the core-libs-dev
mailing list