java.lang.Classcastexception-Fehler: [Ljava.lang.Objekt; nicht kompatibel mit [Ljava.lang.String;
Ich versuche zum abrufen von Elementen aus einem linkedhashset. Unten ist mein code, aber es ist mir Ausnahme jedes mal.
private static void generateRandomUserId(Set<String> userIdsSet) {
Random rand = new Random(System.currentTimeMillis());
String[] setArray = (String[]) userIdsSet.toArray();
for (int i = 0; i < 10; ++i) {
System.out.println(setArray[rand.nextInt(userIdsSet.size())]);
}
}
Unten ist die Ausnahme, ich bin immer-
java.lang.ClassCastException: [Ljava.lang.Object; incompatible with [Ljava.lang.String;
Kann mir jemand helfen? Und gibt es eine bessere Möglichkeit, dies zu tun?
Sollten Sie konvertieren Sie Ihre array mit
userIdsSet.toArray(new String[])
generiert ein String-array. Ansonsten die Methode, die Sie verwenden erzeugen Sie ein Objekt-array.InformationsquelleAutor AKIWEB | 2013-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
den
toArray
Methode übernimmt keine Argumente gibt einObject[]
kann nicht gewirkt werden, um eineString[]
. Die andere version gibt ein typisiertes array.Guter Punkt! In dem link, den Sie Sie benutzen, new String[0]... habe es getestet und es funktioniert so gut wie dein Beispiel
mit
new String[0]
weist ein unnötiges Objekt, so bevorzuge ich die version in meinem Antwort-wo möglich (obwohl der Unterschied minimal ist, ist in den meisten Situationen).warum ist es anders als new String[userIdsSet.size()]?
wenn Sie
set.toArray(new String[0])
erstellen Sie ein leeres array (new String[0]
) und dietoArray
Methode erstellt ein array der richtigen Größe. Wenn Sieset.toArray(new String[set.size()]);
, dietoArray
- Methode setzt das array und gibt es zurück, also nur ein array erstellt.InformationsquelleAutor assylias