java.lang.ClassCastException: [Ljava.lang.Objet; ne peut pas être jeté à l' [Ljava.lang.Chaîne de caractères;
J'ai besoin de convertir HashMap à un tableau de Chaîne, suivez mon code java
import java.util.HashMap;
import java.util.Map;
public class demo {
public static void main(String[] args) {
Map<String, String> map1 = new HashMap<String, String>();
map1.put("1", "1");
map1.put("2", "2");
map1.put("3", "3");
String[] str = (String[]) map1.keySet().toArray();
for(int i=0; i<str.length;i++) {
System.out.println(str[i]);
}
}
}
lorsque j'exécute le code, j'ai le ClassCastException
.
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at demo.main(demo.java:17)
OriginalL'auteur JackSun | 2014-03-29
Vous devez vous connecter pour publier un commentaire.
toArray()
retourne unObject[]
, indépendamment de génériques. Vous pouvez utiliser la surcharge variante à la place:Sinon, depuis un
Set
'stoArray
méthode ne donne aucune garantie quant à l'ordre, et tout ce que vous utilisez le tableau pour l'impression, les valeurs, vous pouvez effectuer une itération de lakeySet()
directement:EDIT:
Juste pour compléter le tableau, dans Java 8, le
foreach
méthode peut être utilisée pour rendre le code plus élégant:String[] str = map1.keySet().toArray(new String[map1.size()]);
vous manqué entre les parenthèses dans map1.size()en effet, merci pour remarquer! Fixe.
String[] str = map1.keySet().toArray(new String[0]);
OriginalL'auteur Mureinik
Il est de retour
Object[]
PasString[]
. Essayez ceci:Object[]
àObject[]
à la première ligne?En effet, deux inconnus (c'est à dire
Object[]
etString
) ne peut pas être fait en une seule étape. Ils ont besoin d'être fait étape par étape. Merci pour la grande inciter.OriginalL'auteur Sabuj Hassan
toArray()
méthode est définie dans la Liste de l'interface de sorte que chaque où il y a un exemple de Liste de, vous avez également accès à cette méthode.Au premier abord, vous pourriez penser que vous pouvez convertir un tableau d'Objets qui ses éléments sont tous de type Chaîne de caractères dans un tableau de chaînes mais java spécifications dit le contraire Lien, en bref, il dit:
bArr = new B[]; A[] aArr = (A[]) bArr;
"œuvres" au moment de l'exécution si et seulement si B est un sous-type d'Un (ou Une).
Si B fait ne contient que Comme c'est hors de propos et le type de compilation de bArr n'est pas utilisé, soit (ce qui compte c'est le runtime type):
Dans votre code en appelant :
image_urls.toArray()
vous obtiendrez un tableau d'Objet et puisque l'Objet n'est pas sous-type de Chaîne, vous bénéficiez d'exception. Pour ce faire, écrire, utiliser d'autres surcharge de
toArray()
quiobtient un tableau d'un certain type (par type de référence) comme "Mureinik" mentionné.
OriginalL'auteur Mr.Q