Hãy xem xét ví dụ nhỏ sau:getDeclaredMethods() hành xử khác nhau trong Java 7 vs Java 8
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("----------");
}
}
Nếu bạn biên dịch ví dụ trên với jdk1.7.0.55 đầu ra là:
---Derived---
public abstract BreakingInterfaces$Derived$DerivedFoo BreakingInterfaces$Derived.foo()
----------
Nhưng khi sử dụng jdk1.8.0.25 đầu ra là:
---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()
----------
Không ai biết, cho dù đây là một lỗi trong jdk1.8.0.25 hoặc tại sao p phương pháp mặc định công cộng resurfaces ở đây?
'm đoán ở đây, nhưng nó có thể là một cái gì đó để làm với java8 mặc định thực hiện các phương pháp trong giao diện. – user902383