Gibt es eine Möglichkeit, durch Reflexion herauszufinden, ob ein Konstruktor ein vom Compiler generierter Standardkonstruktor ist oder nicht? Oder gibt es einen anderen Weg?Wird vom Konstruktor ein Standardkonstruktor generiert?
Überraschenderweise gibt die Methode diese Information nicht, so dass es nicht verwendet werden kann. Und es gibt keine Generated
Annotation vorhanden.
public class JavaTest {
public void run() throws Exception {
out.println(JavaTest.class.getConstructors()[0].isSynthetic()); // Prints false
out.println(Arrays.asList(JavaTest.class.getConstructors()[0].getAnnotations())); // Prints []
}
}
Diese Frage stellt das Gleiche, aber für C#: Detect compiler generated default constructor using reflection in C#
Ich denke, die Antwort wäre die gleiche wie C# Antwort :) – PermGenError
Automatische Standardkonstruktor ist definitiv ein Fehler beim Sprachenentwurf.In einer idealen Welt existiert es nicht, also warum kümmert es dich überhaupt? Welche Funktion hängt von der Erkennung des Standardkonstruktors ab? – ZhongYu
Automatische Standard-Konstruktor sind großartig! Es ist für statische Analysen. Wenn ich weiß, dass ein Konstruktor Standard ist, wie ich weiß, indem ich nur die Deklaration der Klasse anschaue, dass sie leer ist und zum Beispiel den "This" -Zeiger nicht an irgendeiner Stelle verliert. – Lii