Java 有提供 instanceof 來檢查兩個類別或介面是否存在繼承關係,然而如果有多個類別需要按照繼曾關係進行排序時,使用instanceof 則會非常麻煩。
此實驗利用反射機制對 存在繼承關係的類別 進行排序。
isAssignableFrom 可以判斷類別之間的關係,如果相同或是父類別(Super Class),則回傳true,否則回傳false。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class ClassComparator implements Comparator<Class<?>>{ @Override public int compare(Class<?> o1, Class<?> o2) { // TODO Auto-generated method stub if(o1.equals(o2)) return 0; else if(o1.isAssignableFrom(o2)) return -1; else if (o2.isAssignableFrom(o1)) { return 1; }else throw new IllegalArgumentException("兩個類別之間沒有關係"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Test { public static void main(String[] args) { TreeSet<Class<?>> treeSet = new TreeSet<Class<?>>(new ClassComparator()); System.out.println("向樹集中增加 JPanel.class"); treeSet.add(JPanel.class); System.out.println("向樹集中增加 JComponent.class"); treeSet.add(JComponent.class); System.out.println("獲得樹集合的最後一個元素"); System.out.println(treeSet.last()); System.out.println(); for(Class<?> clazz : treeSet) System.out.println(clazz.getName()); } } |
完整專案 (連結)
文章標籤
全站熱搜
