Java类的比较器?
发布时间:2020-12-14 06:05:45 所属栏目:Java 来源:网络整理
导读:我想比较两个 Java类. class ClassComparator implements ComparatorClass { @Override public int compare(Class arg0,Class arg1) { return ....; }} 我可以只比较类名,但我希望父类比从它们派生的类“更
我想比较两个
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()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |