gpt4 book ai didi

java - 有没有办法确定Java类中的方法是否已被覆盖

转载 作者:IT老高 更新时间:2023-10-28 21:18:30 26 4
gpt4 key购买 nike

我希望能够确定基类方法是否已被子类覆盖,特别是因为在调用它之前需要进行昂贵的设置,并且我们系统中的大多数子类都不会覆盖它。是否可以使用反射提供的方法句柄进行测试?或者是否有其他方法可以测试类方法是否被覆盖?

例如

class BaseClass {
void aMethod() { // don nothing }

protected boolean aMethodHasBeenOverridden() {
return( // determine if aMethod has been overridden by a subclass);
}
}

最佳答案

您可以通过检查方法的声明类来使用反射:

class Base {
public void foo() {}
public void bar() {}
}
class Derived extends Base {
@Override
public void bar() {}
}
...
Method mfoo = Derived.class.getMethod("foo");
boolean ovrFoo = mfoo.getDeclaringClass() != Base.class;
Method mbar = Derived.class.getMethod("bar");
boolean ovrBar = mbar.getDeclaringClass() != Base.class;
System.out.println("Have override for foo: "+ovrFoo);
System.out.println("Have override for bar: "+ovrBar);

打印

Have override for foo: false
Have override for bar: true

Demo.

关于java - 有没有办法确定Java类中的方法是否已被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554763/

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