我有以下问题:
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[]
,但结果相同。
答案 0 :(得分:1)
我认为b的价值会被覆盖。
试试这段代码:
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;
答案 1 :(得分:1)
我没有看到问题。也就是说,我认为你能够很快找到它的底部。这是我的建议:
逐渐省略程序中的部分内容。每个步骤后运行代码并查看问题是否仍然存在。每个这样的“实验”都会为您提供有关问题原因的宝贵详细信息。最终,您希望能够检测代码中的哪个元素导致问题。 以下是一些步骤:
o2
,是否会出现问题?o2
但未将其添加到list
,是否会出现问题?a
课程中删除POJO
字段,是否会出现问题?a
更改为单个元素数组(a = new int[1]
),是否会出现问题?a
从数组更改为(比方说)整数,是否会出现问题?b
的类型从int更改为其他原语,是否会出现问题?b
的类型从int更改为其他非基本类型(例如:String
或java.util.Date
),是否会出现问题?o1
和o2
的顺序(即添加(o2)然后添加(o1)),是否会出现问题?POJO
参数(而不是单个ArrayList),是否会出现问题?通常,在应用了诸如此类的几个“转换”步骤之后,我会收集足够的信息来确定根本原因。最重要的是,我试图缩小范围。如果我发现即使o2
被省略也会出现问题,那么我会把它保留下来,继续使用一个更容易理解的小程序。