【发布时间】:2026-01-23 11:55:02
【问题描述】:
我想知道是否有任何方法可以确定给定java.lang.Method 对象表示的方法是否覆盖另一个java.lang.Method 对象表示的方法?
我正在处理Stronlgy typed javascript,我需要能够知道一个方法是否覆盖另一个方法,以便能够将它们重命名为更短的名称。
在这种情况下,我说的是覆盖的扩展定义,由 @Override 注释支持,其中包括接口和抽象类方法的实现。
我对任何涉及直接反射或使用任何已经这样做的库的解决方案都很满意。
【问题讨论】:
-
这当然是可能的,但据我所知,没有内置的方法可以做到这一点。您所要做的就是检查JLS 中覆盖定义的条件。
-
我知道,但这远非微不足道,尤其是当我们谈论泛型方法,或使用声明类的泛型类型参数的方法时。
-
如果您在所有覆盖方法上使用 Override 注解,您只需检查注解是否存在。
-
@jeff Override 注释是一个 SOURCE 注释,这意味着它不存在于编译文件中。
-
@Override注释具有retention=source,因此它不会出现在已编译的类中。最重要的是,我正在编写的程序应该分析第三方编写的代码,因此,我对类没有那种控制权。
标签: java inheritance reflection overriding