निम्नलिखित छोटे उदाहरण पर विचार करें:getDeclaredMethods() बनाम जावा 8 जावा 7 में अलग तरह से व्यवहार कर
package prv.rli.codetest;
import java.lang.reflect.Method;
public class BreakingInterfaces {
interface Base {
BaseFoo foo();
interface BaseFoo {
}
}
interface Derived extends Base {
DerivedFoo foo();
interface DerivedFoo extends BaseFoo {
}
}
public static void main(String[] args) {
dumpDeclaredMethods(Derived.class);
}
private static void dumpDeclaredMethods(Class<?> class1) {
System.out.println("---" + class1.getSimpleName() + "---");
Method[] methods = class1.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method);
}
System.out.println("----------");
}
}
आप jdk1.7.0.55 उत्पादन के साथ ऊपर के उदाहरण संकलन तो है:
---Derived---
public abstract BreakingInterfaces$Derived$DerivedFoo BreakingInterfaces$Derived.foo()
----------
लेकिन जब jdk1.8.0.25 उत्पादन का उपयोग कर रहा है:
---Derived---
public abstract prv.rli.codetest.BreakingInterfaces$Derived$DerivedFoo prv.rli.codetest.BreakingInterfaces$Derived.foo()
public default prv.rli.codetest.BreakingInterfaces$Base$BaseFoo prv.rli.codetest.BreakingInterfaces$Derived.foo()
----------
किसी को भी पता है, कि क्या यह jdk1.8.0.25 या क्यों पी में एक बग है सार्वजनिक डिफ़ॉल्ट विधि यहां पुनरुत्थान करता है?
'अनुमान लगा रहा हूं, लेकिन इंटरफ़ेस में विधियों के जावा 8 डिफ़ॉल्ट कार्यान्वयन के साथ ऐसा कुछ हो सकता है। – user902383