有没有办法通过反射找出构造函数是否是编译器生成的默认构造函数?或者有其他方法吗?是构造函数生成的默认构造函数吗?
令人惊讶的是isSynthetic
方法不提供此信息,因此无法使用。并且目前没有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 []
}
}
这个问题问了同样的事情,但对于C#:Detect compiler generated default constructor using reflection in C#
我想答案与C#的答案相同:) – PermGenError
自动默认构造函数绝对是一种语言设计错误。在理想的世界中,它不存在,所以为什么你甚至在乎:)什么特性取决于检测到默认的构造函数? – ZhongYu
自动默认构造函数非常棒!这是为了做静态分析。如果我知道一个构造函数是我所知的默认构造函数,那么只需查看该类的声明,它就是空的,例如不会在任何地方泄漏'this'指针。 – Lii