私は次のコードを持っています。汎用インターフェイスITest
は非汎用インターフェイスによって拡張されていITestDouble
ます。メソッドはop
によってオーバーライドされITestDouble
ます。
のすべてのメソッドをリストしようとするとITestDouble
、op
2 回表示されます。それらが実際に同じ方法であることをどのように確認できますか?
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()の動作と同じ質問であることを知っていますが、その質問には本当の答えがありませんでした.isBridge()
呼び出しは常にfalse
.
op
編集:「重複」メソッドを除外するという汚い仕事をするライブラリでも問題ありません。