Java提供了interfaceof运算符来比较两个类或接口之间是否存在继承关系。但是如果对多个类按照继承关系排序使用这种方法会非常麻烦。
TreeSet<E>是基于TreeMap的NavigableSet实现的。他使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于构造方法。本实例使用Class类中的isAssignableFrom()方法来判断当前Class对象所表示的类与给定的Class对象所表示的类之间的关系,如果相同或者是其父类则返回true,否则返回false。
public boolean isAssignableFrom(Class<?> cls)
public class ClassComparator implements Comparator { @Override //通过实现Comparator接口比较功能 public int compare(Object o1, Object o2) { if (o1.equals(o2)) { return 0; //如果两个类对象相同返回0 } if (o1.getClass().isAssignableFrom(o2.getClass())) { return -1; //如果o1所表示的类是o2所表示的类的父类则返回-1 } if (o2.getClass().isAssignableFrom(o1.getClass())) { return 1; //如果o1所表示的类是o2所表示的类的子类则返回1 } throw new IllegalArgumentException("两个类之间没有关系"); } }
原文:https://www.cnblogs.com/cglib/p/11512504.html