Java类的比较器?

前端之家收集整理的这篇文章主要介绍了Java类的比较器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想比较两个 Java类.
  1. class ClassComparator implements Comparator<Class> {
  2. @Override
  3. public int compare(Class arg0,Class arg1) {
  4. return ....;
  5. }
  6. }

我可以只比较类名,但我希望父类比从它们派生的类“更小”.而且我希望这种不那么关系能够传递并适用于任何两个类. (老实说,在我真正的问题中,一个类总是另一个类的超类,但我想要一些通用案例代码,因为理论上这可以改变.)

也许这已经完成,有人可以共享代码片段?

我想到的是:如果没有一个类派生自另一个类,找到它们从共同祖先派生的两个超类,并比较它们的名字. (嗯,如果任何对象类比任何接口都大,它甚至可以支持接口.)

解决方法

您还可以将不在一个层次结构中的类与它们的深度和远离Object类的类进行比较.
  1. class ClassComparator implements Comparator<Class> {
  2. @Override
  3. public int compare(Class arg0,Class arg1) {
  4. boolean arg0assignable = arg0.isAssignableFrom(arg1);
  5. boolean arg1assignable = arg1.isAssignableFrom(arg0);
  6. if (arg0assignable == arg1assignable && arg0assignable) {
  7. return 0;
  8. } else if (arg0assignable) {
  9. return -1;
  10. } else if (arg1assignable){
  11. return 1;
  12. } else {
  13. return compareByDistanceToObject(arg0,arg1);
  14. }
  15. }
  16.  
  17. private int compareByDistanceToObject(Class arg0,Class arg1) {
  18. int distanceToObject0 = getDistance(arg0);
  19. int distanceToObject1 = getDistance(arg1);
  20. if (distanceToObject0 == distanceToObject1) {
  21. return 0;
  22. } else if (distanceToObject0 < distanceToObject1) {
  23. return -1;
  24. } else {
  25. return 1;
  26. }
  27. }
  28.  
  29. private int getDistance(Class clazz) {
  30. if (clazz == Object.class) {
  31. return 0;
  32. }
  33. return 1 + getDistance(clazz.getSuperclass());
  34. }

猜你在找的Java相关文章