gpt4 book ai didi

java - $1.class 和 $2.class 不是 jgroups 中的可序列化异常

转载 作者:行者123 更新时间:2023-11-29 06:14:03 25 4
gpt4 key购买 nike

我正在使用 jgroups 作为中间件在 Java 中创建一个演示证券交易所分布式程序。我的 Stock 类有一个优先队列,它有一个比较器,结果是 Stock$1.classStock$2.class 以及 Stock.class . Jgroups 只能发送可序列化的数据,但据我了解 $1.class$2.class 是内部类的结果,这些内部类是由于比较器而推断出来的并且不可序列化,因此导致异常JGroups,有人可以帮助我如何使它们也可序列化或其他一些 tweek 不让它看起来像内部类。

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

最佳答案

你的匿名内部类只实现了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;
}

关于java - $1.class 和 $2.class 不是 jgroups 中的可序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com