假设我正在创建一个库,该库提供了一个优先级队列类。用户实例化一个并实现Comparator接口,然后轻轻地将其传递给优先级队列。 我想:
1。 授予用户轻松定义Comparator类的可能性 - 将其作为匿名类实现,就像这个示例所示:
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. 授予用户使用其附加比较器对优先级队列进行序列化和反序列化的可能性。
3。 仅使用JDK实现此目的,没有其他外部库
最好的方法是什么?
目前我在反序列化Comparator类时遇到问题,更具体地说是创建它的实例,因为它在创建它的类中是私有的(“拥有”它)并且它也没有null构造函数(这是这不是一个大问题,因为我可以使用它公开的可用构造函数。)
提前感谢您的任何建议。
答案 0 :(得分:2)
记录该类,解释对于要正确序列化的队列,比较器应该是可序列化的,并且最好不是非静态内部类,因为这也会导致其封闭对象的序列化。还记录了在反序列化队列时比较器类必须可用的事实。
java.util.TreeSet
具有与您所拥有的“问题”相同的“问题”:它将比较器作为参数,将其存储为其内部状态的一部分,并且它是可序列化的。将非可序列化比较器传递给TreeSet构造函数时,FindBugs会生成警告。
我认为你不能做得更好。