2012-12-08 89 views
6

說我創造它提供了除其他的東西優先級隊列類的庫。用戶實例化一個並實現一個Comparator接口,然後輕輕地傳遞給優先級隊列。 我想:Java「的方法序列化」

授予用戶定義比較類的可能性很容易 - 通過實現它作爲一個匿名類,就像這個例子表明:

PriorityQueue<int> pq = new PriorityQueue<int>(); 
    pq.setComparator(new Comparator<int>() { 
       @Override 
       public int compare(int i1, int i2){ 
        if(i1 < i2) return -1; 
        else if(i1 > i2) return 1; 
        else return 0; 
       } 
      };); 

2 。授予用戶序列化和 - 反序列化與其連接的比較器沿着優先級隊列的可能性。

只使用JDK實現這一點,沒有其他外部庫

什麼方法是最好的,以實現這一目標?

目前我有反序列化Comparator類的問題,更具體地創建它的一個實例,因爲它是創建它的類中的私有的(「擁有」它),它也沒有空構造函數(this並不是一個很大的問題,因爲我可以使用它公開的可用構造函數)。

感謝提前任何建議。

回答

2

文獻類,解釋爲被正確序列化的隊列中,比較器應該是可串行化,並preferrably不是非靜態內部類,因爲這也將導致其包圍對象的序列化。當然,還要記錄比較器類在反序列化隊列時必須可用的事實。

java.util.TreeSet與您擁有的「問題」相同:它將比較器作爲參數,將其作爲其內部狀態的一部分存儲,並且它是可序列化的。將不可序列化的比較器傳遞給TreeSet構造函數時,FindBugs會生成警告。

我不認爲你可以做的更好。

+0

感謝JB,我試圖尋找另一種方式來做到這一點,因爲它還挺帶來了一些弊端......可惜我沒和現在我會跟您的建議,堅持喝彩 –