如何在String数组中转换Serializable?

时间:2017-09-14 21:23:05

标签: java generics casting apache-commons serializable

我想将一些字符串数组合并为一个。我使用了ArrayUtils.addAll(T[], T...)我在一些答案here上找到的。正如在那里描述的那样,我应该将它转换为String数组。当我尝试这样做时,它会向我显示此错误

  

无法将java.io.Serializable存储在java.lang.String数组中       在org.apache.commons.lang3.ArrayUtils.addAll

我的代码在这里

String[] splitLeft=split(left);
String[] middle=new String[]{with};
String[] splitRight=split(right);

String[] inWords=(String[])ArrayUtils.addAll(splitLeft,middle,splitRight);

问题是什么,我该如何解决?

Ps:with只是一个字符串。

1 个答案:

答案 0 :(得分:3)

这里的问题是the signature of the method是:

    addAll(T[] array1, T... array2)

所以第二个和第三个参数被视为array2的单个元素:它们没有连接;因此,推断类型是Serializable,它是String(第一个参数的元素类型)和String[](varargs的元素类型)的最小上限。 / p>

相反,如果您要使用ArrayUtils.addAll进行多次通话,则必须加入他们:

addAll(addAll(splitLeft, middle), splitRight)

或者,您可以在少量语句中构建连接数组:

// Copy splitLeft, allocating extra space.
String[] inWords = Arrays.copyOf(splitLeft, splitLeft.length + 1 + splitRight.length);

// Add the "with" variable, no need to put it in an array first.
inWords[splitLeft.length] = with;

// Copy splitRight into the existing inWords array.
System.arraycopy(splitRight, 0, inWords, splitLength.length + 1, splitRight.length);