我有以下问题:
class POJO implements Serializable{
int[] a = new int[2];
int b;
}
服务器:
printThere(ArrayList<POJO> list) throws RemoteException{
for(POJO obj:list)
System.out.println(obj.a[0]+" "+obj.a[1]+" "+obj.b);\\<-----THERE LINE
}
客户:
main(){
POJO o1 = new POJO();
o1.a[0] =1;
o1.a[1] =2;
o1.b= 11;
POJO o2 = new POJO();
o2.a[0] =10;
o2.a[1] =20;
o2.b= 111;
ArrayList<POJO> list = new ArrayList<POJO>();
list.add(o1);
list.add(o2);
for(POJO obj:list)
System.out.println(obj.a[0]+" "+obj.a[1]+" "+obj.b);\\<-----HERE LINE
server = proxy.lookup("server");
server.printThere(list);
}
这里的行打印如下:
1 2 11
10 20 111
打印的行如下:
1 2 111
10 20 111
为什么我失去了 b
的值在一个物体中?我尝试使用 Vector<POJO>
和一个 POJO[]
在远程方法中但得到了相同的结果。
最佳答案
我没有看到问题。也就是说,我认为您很快就能弄清真相。这是我的建议:
逐渐从你的程序中省略一些片段。每个步骤之后运行代码并查看问题是否仍然存在。每个这样的“实验”都会为您提供有关问题原因的有值(value)的详细信息。最终您希望能够检测代码中的哪个元素导致了问题。 以下是在此过程中需要采取的一些步骤:
- 如果删除
o2
是否会出现此问题从你的代码中? - 如果您创建
o2
,是否会出现此问题但不要将其添加到list
? - 如果删除
a
是否会出现此问题来自POJO
的字段类(class)? - 如果更改
a
是否会出现此问题到单个元素数组(a = new int[1]
)? - 如果更改
a
是否会出现此问题从数组到(比如说)整数? - 如果更改
b
是否会出现此问题的类型从 int 转换为其他原始类型? - 如果更改
b
是否会出现此问题的类型从 int 转换为其他非原始类型(例如:String
或java.util.Date
)? - 如果更改
o1
的顺序,是否会出现此问题?和o2
在列表内(即先添加(o2)然后添加(o1))? - 如果您将 printThere() 的签名更改为(例如)
POJO
,是否会出现问题?参数(而不是单个 ArrayList)? - 如果更改打印中字段的顺序(例如,先打印 b,然后打印 a[1],然后打印 a[0]),是否会出现问题?
- ...
通常,在应用诸如此类的几个“转换”步骤之后,我会收集足够的信息来确定根本原因。最重要的是,我尝试缩小范围。如果我发现即使 o2
也会出现问题被省略,然后我将其保留,继续使用更容易理解的较小程序。
关于java - 序列化和 RMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5846870/