コンストラクタがコンパイラによって生成されたデフォルトのコンストラクタであるかどうかをリフレクションによって調べる方法はありますか?それとも別の方法がありますか?コンストラクタはデフォルトのコンストラクタを生成していますか?
驚くべきことに、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