I strongly suspect that what you're seeing is a side-effect of the fact that the JLS defines the following bit for fields:
public static final int VOLATILE = 0x00000040;
and the following bit for methods:
static final int BRIDGE = 0x00000040;
Note that they have the same value (the same bit has a different meaning for methods and fields).
If you call e.g. Modifier.toString(int)
without, as the documentation suggests:
Note that to perform such checking for a known kind of entity, such as a constructor or method, first AND the argument of toString
with the appropriate mask from a method like constructorModifiers
or methodModifiers
.
then you'll get inappropriate output (including bridge methods, autogenerated for e.g. covariant return type, showing up as 'volatile').
At least the current OpenJDK Method.toString()
filters this out; if yours isn't, perhaps you're using a different or older version of the JDK which doesn't do this correctly.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…