Czy istnieje sposób, aby dowiedzieć się przez refleksję, czy konstruktor jest konstruktorem domyślnym generowanym przez kompilator, czy też nie? Czy jest jakiś inny sposób?Czy konstruktor generuje domyślny konstruktor?
Nieoczekiwanie metoda isSynthetic
nie podaje tych informacji, więc nie można ich użyć. I nie ma adnotacji Generated
.
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 []
}
}
To pytanie zadaje to samo, ale dla C#: Detect compiler generated default constructor using reflection in C#
Myślę, że odpowiedź byłaby taka sama jak odpowiedź C# :) – PermGenError
Automatyczny konstruktor domyślny jest zdecydowanie błędem w projektowaniu języka.W idealnym świecie nie istnieje, więc dlaczego tak ci na tym zależy :) Jaka funkcja zależy od wykrycia domyślnego konstruktora? – ZhongYu
Automatyczny konstruktor domyślny jest świetny! To do analizy statycznej. Jeśli wiem, że konstruktor jest domyślny, niż ja wiem, tylko patrząc na deklarację klasy, jest on pusty i na przykład nie przecieka tego wskaźnika. – Lii