14

java.lang.Method特定のオブジェクトによって表されるメソッドが別のオブジェクトによって表される別のメソッドをオーバーライドするかどうかを判断する方法があるかどうか疑問に思っていましたjava.lang.Methodか?

私はStronlgy 型の javascriptに取り組んでおり、両方の名前を短い名前に変更できるようにするために、メソッドが別のメソッドをオーバーライドするかどうかを知ることができる必要があります。

この場合、アノテーションでサポートされているオーバーライドの拡張定義について話しています@Override。これには、インターフェイスと抽象クラス メソッドの実装が含まれます。

リフレクションを直接使用するか、すでにこれを行っているライブラリを使用するソリューションに満足しています。

4

1 に答える 1

5

メソッド名とシグネチャを簡単に照合できます。

public static boolean isOverriden(Method parent, Method toCheck) {
    if (parent.getDeclaringClass().isAssignableFrom(toCheck.getDeclaringClass())
            && parent.getName().equals(toCheck.getName())) {
         Class<?>[] params1 = parent.getParameterTypes();
         Class<?>[] params2 = toCheck.getParameterTypes();
         if (params1.length == params2.length) {
             for (int i = 0; i < params1.length; i++) {
                 if (!params1[i].equals(params2[i])) {
                     return false;
                 }
             }
             return true;
         }
    }
    return false;
}

ただし、目的はメソッドの名前を変更することであるため、代わりにASMなどのバイトコード分析/操作ライブラリを使用することをお勧めします。このライブラリでは、同じテストを実行できるだけでなく、メソッドが true を返す場合にメソッドの名前を簡単に変更できます。

于 2012-08-26T21:20:29.860 に答える