web-dev-qa-db-fra.com

java.lang.ClassCastException: [Ljava.lang.Object; ne peut pas être converti en [Ljava.lang.String;

J'ai besoin de convertir HashMap en un tableau String, voici 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]);
        }
    }
}

quand je lance le code, j'obtiens la ClassCastException suivante. 

Exception in thread "main" Java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at demo.main(demo.Java:17)
15
JackSun

toArray() renvoie un Object[], indépendamment des génériques. Vous pouvez utiliser la variante surchargée à la place:

String[] str = map1.keySet().toArray(new String[map1.size()]);

Sinon, comme la méthode Set 's toArray ne donne aucune garantie quant à l'ordre, et que vous utilisez uniquement le tableau pour imprimer les valeurs, vous pouvez itérer directement la fonction keySet():

for (String str: map1.keySet()) {
    System.out.println(str);
}

EDIT: .__ Pour compléter le tableau, en Java 8, la méthode foreach peut être utilisée pour rendre le code plus élégant:

map1.keySet().forEach(System.out::println);
27
Mureinik

Il renvoie Object[] Pas String[]. Essaye ça:

Object[] obj = (Object[]) map1.keySet().toArray();
for(int i=0; i<obj.length;i++) {
    String someString = (String)obj[i];
    System.out.println(someString);
}
5
Sabuj Hassan