Da ich in letzter Zeit eine Menge C + + -Codierung mache, finde ich, dass Java bei der Typüberprüfung viel strenger ist als C++. Java sieht alles außer primitiven Typen als Objekt, aber Java geht noch einen Schritt weiter bei der Unterscheidung von Array- und Nicht-Array-Typen. Während der Zuweisung wie "a [0] = b;" , Java prüft zuerst, ob es sich um einen Array-Typ handelt oder nicht, danach wird der normale polymorphe Typ überprüft. Wenn Sie Ihren Code Arbeit machen, sollten Sie tun, ...
Object[][] a = {{null}, {"foo"}};
Object[] b = {"bar", new java.util.Date()};
a[0] = b;
können Sie sehen, wie besondere Sorgfalt auf Array-Typen nehmen Java von der Suche in Java-Klassensignatur, die Class.forName() als Parameter übergeben wird . Zum Beispiel Datentyp ..
com.foo.Bar[][] barsIn2D;
mit Unterschrift geladen ...
// [ => Array
// [[ => Array of Array type
// L<object>; => Object, not Array
Class.forName("[[Lcom/foo/Bar;");
Wie Sie sehen, Unterschrift beginnt entweder mit '[' oder 'L'. Dies sagt uns, ob es ein Array oder nicht hat Vorrang vor "Lcom/foo/Bar;".
Die Hässlichkeit einer Besetzung wie diese hat mich dazu inspiriert, solche Arrays zu verwenden; Ich werde nur eine "normale" Klasse von Objektreferenzen verwenden. Aber danke! – Fixee
@Fixee, Arrays in Java sind eher hässlich, aber Sie können oft die Notwendigkeit von Umwandlungen vermeiden, indem Sie die Anzahl der Speichervorgänge für heterogene Daten reduzieren. In der Regel müssen Sie weder Strings noch Objekt [] s im selben Array speichern. – Antimony
@Antimony Ich kann eigentlich keinen einzigen Anwendungsfall finden, wo du * so etwas * brauchen würdest ...;) – brimborium