getDeclaredMethods()此处的行为正确,因为它可以准确告诉您在类中找到的内容。如果输入
interface使用Java
7目标的编译器(或更旧的编译器),您将看不到Java 7实现的输出有所不同
getDeclaredMethods()。
这是 编译器 ,其行为不同。
interface在Java 8中编译此类子程序时,将生成桥接方法,该方法将不会为Java 7目标生成,因为Java
7目标甚至不可能。
现在为接口生成桥接方法的原因是,通常您拥有比接口更多的实现类,因此在接口中使用
default桥接方法可以避免将桥接方法添加到每个实现中。此外,如果只有一种
abstract方法没有实现的桥接方法,它会使lambda类的生成更加容易。
当
interface层次结构需要桥接方法但不提供时
default,编译器必须使用
Lambdametafactory.altmetafactory而不是
Lambdametafactory.metafactory指定所需的每个桥接方法来生成代码。



