Java 当只有一个实现时,为什么反射返回两个方法? 假设我有以下代码:

Java 当只有一个实现时,为什么反射返回两个方法? 假设我有以下代码:,java,generics,inheritance,reflection,Java,Generics,Inheritance,Reflection,对于getAddressMethodCount变量,将产生2;为什么会这样?这是协变返回类型的实现方式javap-private将比反射更方便地向您展示 具有的子类有一个合成桥接方法,用于处理转发到更具体的方法。就JVM而言,方法有一个名称、一系列原始类型参数和一个原始类型返回。您可以重载字节码中的返回类型 ASystem.err.println(metod.getReturnType())应该为这两种方法提供不同的结果。哪一种是我班上的方法?它们都在你们班上。询问该方法的返回类型将显示一个方法

对于
getAddressMethodCount
变量,将产生2;为什么会这样?

这是协变返回类型的实现方式
javap-private
将比反射更方便地向您展示

具有的子类有一个合成桥接方法,用于处理转发到更具体的方法。就JVM而言,方法有一个名称、一系列原始类型参数和一个原始类型返回。您可以重载字节码中的返回类型


A
System.err.println(metod.getReturnType())
应该为这两种方法提供不同的结果。

哪一种是我班上的方法?它们都在你们班上。询问该方法的返回类型将显示一个方法返回地址,而另一个,即Tom上面提到的合成桥,将返回您的AddressImpl类型。+1可能会在一个
方法上返回
true
,在另一个
方法上返回
false
。@PaulBellora是的,和
isBridge
javap-v
将显示
ACC_桥、ACC_合成
标志。我喜欢这样。我每天都在发现一些事情。
public interface Address {
    public int getNo();
}

public interface User<T extends Address> {
    public String getUsername();
    public T getAddress();    
}

public class AddressImpl implements Address {
    private int no;
    public int getNo() {
        return no;
    }
    public void setNo(int no) {
        this.no = no;
    }
}

public class UserImpl implements User<AddressImpl> {
    private String username;
    private AddressImpl addressImpl;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }

    public AddressImpl getAddress() {
        return addressImpl;
    }

    public void setAddress(AddressImpl addressImpl) {
        this.addressImpl = addressImpl;
    }
}
int getAddressMethodCount = 0;
for (Method method : UserImpl.class.getMethods()) {
    if (method.getName().startsWith("getAddress")) {
        getAddressMethodCount++;
    }
}