2012-12-08 42 views
6

Giả sử tôi đang tạo một thư viện cung cấp một số thứ khác cho lớp xếp hàng ưu tiên. Người dùng instantiates một và thực hiện một giao diện Comparator mà sau đó được truyền nhẹ nhàng đến hàng đợi ưu tiên. Tôi muốn:Java "tuần tự hóa phương thức" của lớp ẩn danh

1.cấp cho người dùng khả năng để xác định lớp Comparator dễ dàng - bằng cách thực hiện nó như một lớp vô danh, giống như ví dụ này cho thấy:

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; 
       } 
      };); 

cấp cho người dùng khả năng sắp xếp-và-deserialize hàng đợi ưu tiên ALONG với bộ so sánh được đính kèm của nó.

3.chỉ sử dụng JDK để đạt được điều này, không có thư viện bên ngoài khác

cách tiếp cận nào sẽ là tốt nhất để đạt được điều này?

Hiện tại tôi đang gặp vấn đề deserializing lớp Comparator, cụ thể hơn là tạo một thể hiện của nó vì nó riêng tư trong lớp tạo ra nó ("sở hữu" nó) và nó cũng không có hàm tạo null không thực sự là một vấn đề lớn vì tôi có thể sử dụng các hàm tạo sẵn có mà nó cho thấy).

Cảm ơn mọi đề xuất trước.

Trả lời

2

Tài liệu lớp học, giải thích rằng hàng đợi được sắp xếp đúng cách, bộ so sánh nên được tuần tự hóa, và tốt nhất không phải là lớp bên trong không tĩnh, vì điều này cũng gây ra sự tuần tự hóa đối tượng kèm theo của nó. Ngoài ra tài liệu thực tế là lớp so sánh phải có sẵn khi deserializing hàng đợi, tất nhiên.

java.util.TreeSet có cùng "sự cố" như bạn gặp phải: nó sẽ so sánh làm đối số, lưu trữ nó như là một phần của trạng thái nội bộ và có thể tuần tự hóa. FindBugs tạo ra một cảnh báo khi bạn vượt qua một bộ so sánh không tuần tự hóa với một hàm tạo TreeSet.

Tôi không nghĩ bạn có thể làm tốt hơn thế.

+0

cảm ơn JB, tôi đã cố gắng tìm cách khác để làm điều này vì nó gây ra một số nhược điểm ... tiếc là tôi đã không và bây giờ tôi sẽ gắn bó với đề xuất của bạn, cổ vũ –

Các vấn đề liên quan