按继承层次对类排序

  • 实例说明

  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("两个类之间没有关系");
    }

}

 

posted @ 2019-09-12 16:17  Joy丨windy  阅读(283)  评论(0编辑  收藏  举报