gpt4 book ai didi

java - GetDeclaredMethods (java) 中的问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:34 26 4
gpt4 key购买 nike

我的代码有一个小问题

我有两个类

public class A {

public A foo(int a) {return new A();}
}

public class B extends A{

public B foo(int x){ return new B();}
}

现在在我的代码中我只想打印在类 B 中声明的方法

这样

B b = new B();

Method[] m = b.getClass().getDeclaredMethods();

for (int i = 0; i < m.length; i++) {

System.out.print(m[i].getName());
}

为什么输出是

foo

foo

为什么 GetDeclaredMethods 也在 A 类中找到 foo?我该如何修复它?

谢谢

最佳答案

您遇到问题的原因是两个方法的协变返回类型。因为您有一个协变返回类型(B 的返回类型是 B,而不是 A,与父类(super class)不同),Java 在底层会生成一个具有原始返回类型的单独方法,以充当 1.5 之前的字节码规范和新的 Java 1.5 语言行为之间的桥梁。

您应该用来检查的方法是 isBridge() 方法,因为它准确地表达了您想要排除的内容。所以最终的代码看起来像这样:

Method[] methods = B.class.getDeclaredMethods();

for (Method method : methods) {

if (!method.isBridge()) {
System.out.println(method.getName());
}
}

关于java - GetDeclaredMethods (java) 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com