IE8阵列订购错误

时间:2011-12-21 14:26:26

标签: arrays gwt internet-explorer-8

将元素添加到已在2个步骤中构造的ArrayList<String>会导致不同步的数组。它只发生在生成的JS代码中,而不是在开发模式中。

// The list where the bug occurs
ArrayList<String> list = new ArrayList<String>();

// Add a first element to the List
list.add("0");

//tmpList with elements that we will add at the end of the original 
//list(at least 32 elements makes the bug occurs) 

ArrayList<String> tmpList = new ArrayList<String>();
for(int i=1;i<33;i++) tmpList.add(""+i);
list.addAll(tmpList);

// The bug occurs when we add an element X to the position
// 1 or 2. The bug also occurs when usind addAll method
list.add(1,"X");

结果数组是......

0 X 1 2 *4* *3* *4* 5 6 7 8 9 10 11 12 13 14 15 
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 

而不是预期的结果......

0 X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

这是一种有效的解决方法。

ArrayList<String> finalList = new ArrayList<String>();
for(int i=0; i<1;i++)
   finalList.add(list.get(i));
finalList.add("X");
for(int i=1; i<list.size();i++)
   finalList.add(list.get(i));

1 个答案:

答案 0 :(得分:0)

也许这是IE的javascript错误,尝试单独添加每个元素而不是使用 addAll ,看看调试代码发生了什么:

for(int i=1;i<33;i++) list.add(i+"");