2016-06-10 5 views
2

Ich bin kein Java-Programmierer, aber müssen einige Java-Arbeit tun. Von etwas Googeln scheint das eine anonyme Unterklasse zu sein. Dann folgt auf das Objekt "[]". Aber dann wieder die Variable deklariert ist ein Objekt. Ist dies nur eine Kontravarianz mit dem allgemeinsten Typ (Objekt), der ein Array von Objekten zulässt?Anonyme Unterklasse des Arrays? Ich denke? Verstehen Sie nicht diese Syntax

Object thing = new Object[] {someInt, anotherInt, someInterface, someString}; 
+4

als Sideknoten, die Verwendung eines 'Object []' zum Speichern verschiedener Typen ist nicht die beste Idee, um reibungslos zu arbeiten. – SomeJavaGuy

+0

Yup, nicht mein Code. Jemand anders lesen. Obwohl ich denke, in diesem Fall ist es eine einmalige Sache, diese für Werte zu übergeben, aber immer noch ein bisschen hacky. – lanza

+0

@lanza Ich würde das als ein Warnzeichen betrachten. Wie Kevin sagte, ist die Verwendung eines 'Object []' nicht sehr glatt (es ist eindeutig eine Art von Klasse), und die Zuweisung zu 'Object' trägt nur zum Faktor" Was für ein Fudge "bei. – Kayaman

Antwort

6

Nein. Arrays sind endgültig, daher können sie nicht unterklassifiziert werden. Der Code erstellt nur ein Objekt-Array Object[] und zur Erstellungszeit füllt es mit einigen Ints (Autoboxed zu Integer), eine Schnittstelle und eine Zeichenfolge.

Die "ungerade" Sache über das Beispiel ist, dass es die Object[] einer Object Referenz zuweist. Jetzt erweitern alle Klassen Object einschließlich Arrays, so dass dies gültig ist, aber ich kann mir keinen Fall vorstellen, wo es Sinn hätte, Object thing anstelle von Object[] thing zu haben, wenn Sie absichtlich versuchen, Ihren Code weniger klar zu machen.

+0

Großartig, danke. Die 'Objekt-Sache' anstelle von' Objekt-Ding' hat mich verwirrt. – lanza

+0

@lanza Ich schrieb [eine Antwort auf eine ähnliche Frage] (http://Stackoverflow.com/a/37696382/3788176) Anfang dieser Woche, was meiner Meinung nach helfen könnte, etwas von Ihrer Verwirrung über 'Object' vs' Object [zu entfernen] ] '. –

+0

@AndyTurner Schöne Antwort. – Kayaman