gpt4 book ai didi

java - GetDeclaredMethods 中的问题 (java)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:31 25 4
gpt4 key购买 nike

我的代码有一个小问题

我有两个类(class)

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 之前的字节码规范和 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/1961350/

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