Java getMethods() 关于继承层次

Java getMethods() with respect to inheritance hirarchy

我最终想要做的是以这样的方式调用所有具有注释的方法:

  1. 覆盖的方法将只调用一次。

  2. 如果对象的 class 是 B,并且它继承自 A,而 A 继承自 Object,我需要这些方法在 Object 中定义,首先调用该注释,然后是 A 中的方法,然后是 B.

    中的方法

有没有办法让方法按这种方式排序?

您可以创建一个 Comparator 来根据声明对象的 class 对 Method 对象进行排序:

public static class MethodInheritanceComparator implements Comparator<Method> {

    @Override
    public int compare(Method m1, Method m2) {
        Class<?> class1 = m1.getDeclaringClass();
        Class<?> class2 = m2.getDeclaringClass();

        if (class1.equals(class2)) {
            return 0;
        }
        if (class1.isAssignableFrom(class2)) {
            return -1;
        }
        if (class2.isAssignableFrom(class1)) {
            return 1;
        }
        return 0;
    }
}

然后用它对您拥有的 Method 个对象进行排序。例如:

Method[] methods = // All the relevant methods...
Arrays.sort(methods, new MethodInheritanceComparator());

请注意,在重写方法的情况下,Class#getMethods 仅 returns 一个 Method 对象,因此您的第一个要求“开箱即用”。