Is constructor generated default constructor?

后端 未结 2 1562
一向
一向 2021-02-19 04:52

Is there a way to find out by reflection whether a constructor is a compiler generated default constructor or not? Or is there some other way?

Surprisingly the isS

2条回答
  •  遥遥无期
    2021-02-19 05:33

    No, there is no metadata in the bytecode that would allow you to distinguish a compiler generated default constructor from a non-generated one.

    In most cases, compiler generated constructors and methods are marked with the ACC_SYNTHETIC flag or the Synthetic attribute in the generated bytecode. However, there are a few notable exceptions as per 13.1 item 7 from the Java Language Spec and 4.7.8 from the jvm-spec

    Here is the relevant bit from the JLS:

    Any constructs introduced by a Java compiler that do not have a corresponding construct in the source code must be marked as synthetic, except for default constructors, the class initialization method, and the values and valueOf methods of the Enum class

    As far as I know, javap does not show the ACC_SYNTHETIC flag but you would be able to read it through isSynthetic if it was set.

提交回复
热议问题