Verwenden der [[[Ljava.lang.String;
Notation ist der normale Weg Array Klassennamen darstellen.
Der XMLEncoder und XMLDecoder verwenden Standard-Java-Funktionalität zum Schreiben und Lesen Arrays:
String[][][] foo = new String[3][4][5];
foo[0][0][0] = "a";
foo[2][3][4] = "z";
XMLEncoder encoder = new XMLEncoder(System.out);
encoder.writeObject(foo);
encoder.flush();
encoder.close();
ergibt folgendes Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_22" class="java.beans.XMLDecoder">
<array class="[[Ljava.lang.String;" length="3">
<void index="0">
<array class="[Ljava.lang.String;" length="4">
<void index="0">
<array class="java.lang.String" length="5">
<void index="0">
<string>a</string>
...
ich derzeit sehe kein Problem in Class.forName mit() mit einem selbst erstellten Klassennamen (z. B. dem [L
vorangestellt, da er auch von den Java-Standardklassen in gleicher Weise verwendet wird.
Class arrayClass = Class.forName("[L" + "java.lang.String" + ";");
Und wie die JavaDoc for Class.forName beschreibt, ist die Klasse geladen, aber nicht initialisiert, und Sie müssen auch keine Instanz dafür erstellen.
Wenn name
eine Array-Klasse bezeichnet wird das Bauteil Typ die Array-Klasse geladen, aber nicht initialisiert.
Ihre letzte Bemerkung zu verschiedenen Blog-Posts, wo dies nicht funktionieren würde, wäre interessant zu untersuchen.
sollte es nicht sein [[[[Ljava.lang.String; statt [[[[Ljava/lang/String ;? – dogbane
Nun, so oder so, verschiedene Beiträge sagen, das ist nicht in allen Kontexten gültig. – MeBigFatGuy
Sie erstellen keine Instanz der Klasse, sondern ein Array der Länge Null. Warum denkst du, ist die algorithmische Konstruktion der "[[[[KlassennameHierarchie]" -Strange billiger oder in irgendeiner Weise besser als die Konstruktion eines Nulllängen-Arrays? Der verlinkte Fehler bezieht sich übrigens auf 'ClassLoader.loadClass (...)' nicht auf 'Class.forName (...)'. – Holger