我有下面的代碼,用一個通用的接口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
方法的骯髒工作。
您只能看到類不是接口的網橋,因爲網橋是一個方法調用另一個方法的存根的一段代碼。 –
事實上,我如何理解實際上只有一個「op」方法? – Flavio
是的,但我不知道簡單的告訴他們從接口單獨是相同的方式。您可以查看ITest的通用信息,並推斷出這些方法是相同的,但這是很多工作。 –