2017-09-14 10 views
0

Je voulais joindre des tableaux de chaînes en un seul. Et j'ai utilisé ArrayUtils.addAll(T[], T...) j'ai trouvé sur certaines réponses here. Comme il est décrit ici, je devrais le convertir en un tableau String. Quand je tente de le faire, il me montre cette erreurComment faire pour convertir Serializable dans un tableau de String?

Cannot store java.io.Serializable in an array of java.lang.String at org.apache.commons.lang3.ArrayUtils.addAll

Mon code est ici

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

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

Quel est le problème, et comment puis-je résoudre ce problème?

Ps: with est juste une chaîne.

+0

ce que ArraysUtils utilisez-vous? https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ArrayUtils.html#addAll (java.lang.Object [], java.lang.Object []) - accepte seulement 2 tableaux –

+2

@BojanPetkovic 3.6 va jusqu'à 11. Eh bien, pas 11, à varargs. – pvg

+0

J'utilise lang3 –

Répondre

3

Le problème ici est que the signature of the method est:

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

de sorte que les deuxième et troisième paramètres sont traités comme des éléments individuels de array2: ils ne sont pas concaténées; en tant que tel, le type inféré est Serializable, qui est la limite supérieure de String (le type d'élément du premier paramètre) et String[] (le type d'élément de la varargs).

Au lieu de cela, vous devrez les joindre à plusieurs appels, si vous allez faire avec ArrayUtils.addAll:

addAll(addAll(splitLeft, middle), splitRight) 

Alternativement, vous pouvez simplement construire le tableau concaténés dans un petit nombre d'instructions:

// 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

Deuxième et troisième sont traités comme des valeurs uniques? mais alors, comment pouvons-nous concaténer 2 tableaux? –

+0

@KristjanKica "à la place, vous devrez ..." –

+0

Je sais, ça marche maintenant. Merci! –