2015-04-22 14 views
9

Sto cercando di convertire un array di char in un Set di Personaggi.Perché il casting implicito non si verifica qui?

Logicamente se scrivessi qualcosa come How to convert an Array to a Set in Java invece di usare le funzioni integrate funzionerebbe. Tuttavia, utilizzando le funzioni integrate con i generici, ciò non avviene.

TreeSet<Character> characterSet = Sets.newTreeSet(); 

    String myString = "string"; 
    Character [] characterArray = {'s','t','r','i','n','g'}; 


    Collections.addAll(characterSet,characterArray); // This works 
    Collections.addAll(characterSet,myString.toCharArray()); // This Does not 

Perché non gettati serie di char a characters?

Come seguito di una risposta. (Grazie) Penso che un semplice esempio di cosa intendo sia: perché la prima riga è implicitamente lanciata, ma la seconda riga no?

Character [] characterArray = {'s','t','r','i','n','g'}; // works 
    Character [] characterArray2 = myString.toCharArray(); // does not work 

mia comprensione è entrambi i lati destro fare character[] variabless

+0

Per farla breve: non c'è autoboxing da "primitive type array" a "wrapper type array". – Tom

+0

Significa che 'myString.toCharArray()' non è dello stesso tipo di '{'s', 't', 'r', 'i', 'n', 'g'}'? –

+0

Leggi cosa ha scritto @kocko su quel caso. – Tom

risposta

12

Perché myString.toCharArray() sarà tornare char[] che non è Character[]. È possibile verificare entro questo semplice test:

char[] a = { 'a' }; 
Character[] b = { 'b' }; 
a = b; //doesn't work, because char[] is not a Character[] 

Il Character[] characterArray = {'s','t','r','i','n','g'}; però è conforme Collections.addAll(...), perché quando l'array è inizializzato, ciascuno dei valori è autoboxed da char a Character.

+0

Perché usare '{'s', 't', 'r', 'i', 'n', 'g'}' funzionano nel mio secondo esempio allora? Non restituisce questo tipo 'char []'? –

+0

Ciascuno dei valori, come ho detto, è autoboxato a 'Character', che alla fine risulta in' Character [] '. Questa è una caratteristica dell'inizializzatore dell'array –

+0

Ah. Non avevo capito che aveva regole speciali https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.6 Grazie! –

Problemi correlati