2016-05-21 45 views
1

首先這是一個學術問題,所以我們不要擔心練習是否良好。 假設我們有一個TreeSet<"Object">,我們想用比較器實例化它。這個比較器將返回通常的0,-1和1,但前提是兩個對象是相同的類。因此,當對象屬於不同的類別並且比較它們沒有意義時,比較器應該返回什麼? -1或1?還是比較合同要求我指定所有情況下的訂單,如果我不想拋出運行時異常?比較器的最佳做法當項目不能進行邏輯比較時

回答

2

A Comparator必須指定它可能接收的所有可能值之間的順序。您不能有兩個對象,這些對象可能是您的數據結構的一部分,Comparator無法「處理」。如果比較它們是沒有意義的,那麼就做出一個任意的決定。例如,如果他們是同一類的沒有,只是比較類名:

if (!a.getClass().equals(b.getClass()) { 
    return a.getClass().getName().compare(b.getClass().getName()); 
} 
+0

所以我猜這個合同是,如果我要創建一個比較我必須爲所有可能的輸入順序,如果我不想拋出異常。 –

+1

@FaiLau yup,並且該順序需要一致。也就是說,對於每個'a'和'b',如果'a.compareTo(b)<0',它必須暗示'b.compareTo(a)> 0'並且如果'a.compareTo(b)= 0',它必須暗示'b.compareTo(a)= 0'。 – Mureinik