我有以下代码,其通用ITest
接口由非通用接口扩展ITestDouble
。该op
方法被 覆盖ITestDouble
。
当我尝试列出 的所有方法时ITestDouble
,我得到op
了两次。如何验证它们实际上是相同的方法?
public class Test {
public static void main(String[] args) throws NoSuchMethodException {
for (Method m : ITestDouble.class.getMethods()) {
System.out.println(m.getDeclaringClass() + ": " + m + "(bridge: " + m.isBridge() + ")");
}
}
public interface ITestDouble extends ITest<Double> {
@Override
public int op(Double value);
@Override
public void other();
}
public interface ITest<T extends Number> {
public int op(T value);
public void other();
}
}
输出:
interface Test$ITestDouble: public abstract int Test$ITestDouble.op(java.lang.Double)(bridge: false)
interface Test$ITestDouble: public abstract void Test$ITestDouble.other()(bridge: false)
interface Test$ITest: public abstract int Test$ITest.op(java.lang.Number)(bridge: false)
PS 我知道这与Java Class.getMethods() behavior on overridden methods是同一个问题,但是这个问题没有得到真正的答案:isBridge()
调用总是返回false
。
编辑:我也可以使用任何可以op
为我过滤掉“重复”方法的肮脏工作的库。