Подтвердить что ты не робот

Определение того, переопределяет ли метод во время выполнения

Мне было интересно, есть ли способ определить, переопределяет ли метод, представленный данным объектом java.lang.Method, другие методы, представленные другим объектом java.lang.Method?

Я работаю над Stronlgy набрал javascript, и мне нужно уметь узнать, переопределяет ли метод другой, чтобы иметь возможность переименовывать оба они имеют более короткое имя.

В этом случае я говорю о расширенном определении переопределения, поддерживаемом аннотацией @Override, которая включает в себя реализацию интерфейса и абстрактных методов класса.

Я был бы доволен любым решением, связанным с отражением напрямую, или с использованием любой библиотеки, которая уже делает это.

4b9b3361

Ответ 1

Вы можете просто перепроверять имена и подписи методов.

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.