java getmethods()关于继承hirarchy

gpnt7bae  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(196)

我最终要做的是以如下方式调用所有具有某些注解的方法:
重写的方法将只调用一次。
如果对象的类是 B ,它继承自 A 继承自 Object ,我需要中定义的方法 Object 首先调用注解,然后调用 A ,然后是中的方法 B .
有没有办法把这些方法按这种方式分类?

hc2pp10m

hc2pp10m1#

你可以创造一个 Comparator 那就分类了 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 只返回一个 Method 对象,这样您的第一个需求就可以“开箱即用”地满足了。

相关问题