In Java ist ein Array ein Objekt. Meine Frage ist ... wird ein Object-Konstruktor aufgerufen, wenn neue Arrays erstellt werden? Wir möchten diese Tatsache verwenden, um den Objektkonstruktor mit einem zusätzlichen Bytecode zu belegen, der die Länge des zu konstruierenden Arrays überprüft. Würde das funktionieren?
Was die Java-Sprachspezifikation betrifft, obwohl beide das new
-Schlüsselwort verwenden, Klasseninstanz-Erstellungsausdrücke und Array Creation Expressions sind verschiedene Ausdrucksformen mit jeweils eigenen Regeln. Die Beschreibung von Array Creation Expressions erwähnt nicht den Aufruf eines Konstruktors.
Nach der JVM-Spezifikation : "Arrays werden erstellt und manipuliert mit einer bestimmten Reihe von Anweisungen. " Während also Arrays Instanzen von Objekten sind, werden sie nicht auf die gleiche Weise initialisiert wie andere Objekte (was Sie sehen können, wenn Sie von diesem Link-Anker nach oben scrollen).
Ich glaube nicht, weil Sie kein natives Array ableiten können, um den Konstruktor zu überschreiben
Sie können die Byte-Code-Manipulation verwenden, um die Überprüfung dort zu platzieren, wo immer ein neues Array erstellt wird.
Nein. Ich habe das auf der AspectJ-Mailingliste gefunden: Ссылка .
Sie fragen wahrscheinlich nach Arrays aus einem Grund, aber wenn Sie können, warum nicht zu den Collection-Klassen wechseln. Das gibt Ihnen viele Möglichkeiten, abzufangen und Validierungen durchzuführen.
Tags und Links java arrays object instrumentation construction