javadoc在`Class.getDeclaredMethod`上的混淆

时间:2018-03-22 06:11:48

标签: java reflection overloading

Class.getDeclaredMethod关注javadoc。

  

如果此Class对象表示具有多个声明的类型   方法与相同的名称和参数类型,但返回不同   类型,然后返回的数组有一个Method对象   方法

我知道我们不能重载一个具有相同名称和参数类型的方法。那么这个doc是什么意思呢?

1 个答案:

答案 0 :(得分:3)

作为EJP said in a comment

  

使用编译器合成的泛型桥接方法可能会发生这种情况。

实际上,它不仅仅适用于仿制药。

每当子类使用不同的返回类型覆盖方法时,编译器都会创建一个合成桥接方法。

以下代码演示了这一点:

public class Super {
    public static void main(String... args) throws Exception {
        for (Method method : Sub.class.getDeclaredMethods())
            System.out.println(method + (method.isSynthetic() ? " **SYNTHETIC**" : ""));
    }
    public Number get() {
        return Double.NaN;
    }
}
class Sub extends Super {
    @Override
    public Integer get() {
        return 42;
    }
}

输出

public java.lang.Integer Sub.get()
public java.lang.Number Sub.get() **SYNTHETIC**