Java getMethods() 关于继承层次
Java getMethods() with respect to inheritance hirarchy
我最终想要做的是以这样的方式调用所有具有注释的方法:
覆盖的方法将只调用一次。
如果对象的 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
对象,因此您的第一个要求“开箱即用”。
我最终想要做的是以这样的方式调用所有具有注释的方法:
覆盖的方法将只调用一次。
如果对象的 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
对象,因此您的第一个要求“开箱即用”。