我正在使用jgroups作为中间件在Java中创建一个演示股票交易所分布式程序。我的Stock类有一个优先级队列,它有一个比较器,结果是Stock$1.class
和Stock$2.class
以及Stock.class
。 Jgroups只能发送可序列化的数据但是从我理解的$1.class
和$2.class
结果来自由于比较器而推断的内部类,并且不可序列化因此导致JGroups的异常,有人可以帮助我如何使它们也可序列化或其他一些微调,以免它看起来像内部类。
import java.io.*;
import java.util.*;
import java.io.Serializable;
public class Stock implements Serializable
{
public String name;
public String symbol;
public int shares = 10000;
public int price = 100;
public PriorityQueue<Order> sellList = new PriorityQueue<Order>(100, new Comparator<Order>()
{
public int compare(Order oldOrder, Order newOrder)
{
int i = oldOrder.price;
int j = newOrder.price;
if(i > j)
return 1;
else if(i < j)
return -1;
else
return 0;
}
}
);
public PriorityQueue<Order> buyList = new PriorityQueue<Order>(100, new Comparator<Order>()
{
public int compare(Order oldOrder, Order newOrder)
{
int i = oldOrder.price;
int j = newOrder.price;
if(i > j)
return -1;
else if(i < j)
return 1;
else
return 0;
}
}
);
}
答案 0 :(得分:3)
您的匿名内部类只实现Comparator
。为了实现Comparator
和 Serializable
,您应该将它们转换为静态嵌套类,例如。
public class Stock implements Serializable {
private static class OrderComparator implements Comparator, Serializable {
public int compare(Order oldOrder, Order newOrder) {
int i = oldOrder.price;
int j = newOrder.price;
if(i > j) {
return 1;
} else if (i < j)
return -1;
} else {
return 0;
}
}
}
private PriorityQueue<Order> sellList = new PriorityQueue<Order>(100, new OrderComparator());
}
这不仅会解决您的直接问题,而且还可以使代码更具可读性。
顺便说一句,上面的比较器可以更简洁地重写:
public int compare(Order oldOrder, Order newOrder) {
return oldOrder.price - newOrder.price;
}