java是否使用反射确定一个方法是否覆盖另一个?
这可能吗
<> p>惟一的解决方案通常认为,如果{{CD1>}可从^ {CD2>}分配,并且如果^ {< CD3>}具有与^ {CD4>}相同的签名,则该方法被重写。但它并不是涵盖所有案例例如,我想处理这个案件:
interface Foo<T> {
void doStuff(T arg);
}
class FooImpl implements Foo<String> {
public void doStuff(String args) {
//Is overriden!
}
}
我还想检查Method B
是否对Method A
实际可见(包范围等)
您是否曾经使用过可靠的方法来确定某个方法是否被重写
多谢各位
# 1 楼答案
如果不涉及泛型,则有一个existing answer来确定是否重写方法
由于type erasure,Java将完全删除泛型类型。所以字节码应该是:
有两种方法。这是一个bridge method。它只需输入cast并调用void doStuff(java.lang.String),因此实际上void doStuff(java.lang.String)不会被覆盖,而void doStuff(java.lang.Object)是。当您使用多态性时,例如:
它实际上调用voiddostuff(java.lang.Object)。因此,如果您使用上面的链接来检测void doStuff(java.lang.Object)是否被覆盖,它将报告yes