2017-09-14 116 views
0

我想将一些字符串数组合并成一个。我用ArrayUtils.addAll(T[], T...)我找到了一些答案here。正如它在那里描述的,我应该把它转换成一个String数组。当我尝试这样做,就说明我这个错误如何将Serializable转换为String数组?

Cannot store java.io.Serializable in an array of java.lang.String at 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只是一个字符串。

+0

您使用的是ArraysUtils? https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html#addAll(java.lang.Object [],java.lang.Object []) - 只接受2个数组 –

+2

@BojanPetkovic 3.6上升到11,而不是11,可变参数。 – pvg

+0

我正在使用lang3 –

回答

3

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

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

所以第二和第三个参数被视为的array2单个元件:它们不是级联;因此,推断类型为Serializable,它是String(第一个参数的元素类型)和String[](可变参数的元素类型)的最小上界。

相反,你将不得不加入他们的行列中多次调用,如果你要与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); 
+0

第二个和第三个被视为单个值? 但是,如何连接2个数组? –

+0

@KristjanKica“相反,你将不得不......” –

+0

我知道,它现在有效。感谢名单! –

相关问题