我想比较两个
Java类.
class ClassComparator implements Comparator<Class> {
@Override
public int compare(Class arg0,Class arg1) {
return ....;
}
}
我可以只比较类名,但我希望父类比从它们派生的类“更小”.而且我希望这种不那么关系能够传递并适用于任何两个类. (老实说,在我真正的问题中,一个类总是另一个类的超类,但我想要一些通用案例代码,因为理论上这可以改变.)
也许这已经完成,有人可以共享代码片段?
我想到的是:如果没有一个类派生自另一个类,找到它们从共同祖先派生的两个超类,并比较它们的名字. (嗯,如果任何对象类比任何接口都大,它甚至可以支持接口.)
解决方法
您还可以将不在一个层次结构中的类与它们的深度和远离Object类的类进行比较.
class ClassComparator implements Comparator<Class> {
@Override
public int compare(Class arg0,Class arg1) {
boolean arg0assignable = arg0.isAssignableFrom(arg1);
boolean arg1assignable = arg1.isAssignableFrom(arg0);
if (arg0assignable == arg1assignable && arg0assignable) {
return 0;
} else if (arg0assignable) {
return -1;
} else if (arg1assignable){
return 1;
} else {
return compareBydistancetoObject(arg0,arg1);
}
}
private int compareBydistancetoObject(Class arg0,Class arg1) {
int distancetoObject0 = getdistance(arg0);
int distancetoObject1 = getdistance(arg1);
if (distancetoObject0 == distancetoObject1) {
return 0;
} else if (distancetoObject0 < distancetoObject1) {
return -1;
} else {
return 1;
}
}
private int getdistance(Class clazz) {
if (clazz == Object.class) {
return 0;
}
return 1 + getdistance(clazz.getSuperclass());
}