java.lang.reflect.Method

时间:2019-03-26 07:56:28

标签: java reflection

我正在使用java反射来获取使用特定Annotation进行注释的方法。它返回两个方法,一个带有修饰符4161的方法属于该接口。但是我检查了修改器的规格,在任何地方都找不到它……需要帮助,tks:)

enter image description here

1 个答案:

答案 0 :(得分:6)

modifiers整数基本上是形成位字段的整数标志的组合。您可以使用静态Modifier.toString()方法来获取文本表示形式。如果使用此方法,它将告诉您4161代表public volatile,并且这是错误的

为进行分解,由4161表示的位字段由3个整数标志组成:1644096。在Modifier Javadoc中查找这些值,它会告诉您1代表public,而64代表volatile。令人惊讶的是,由于不能将方法声明为volatile4096又如何呢?甚至不在列表中!

答案可以在JVM specification中找到,我们在其中找到

  • 40960x1000)表示 synthetic 方法,即源代码中不存在的方法。
  • 640x0040)不仅代表volatile访问修饰符,还可以用来表示方法是 bridge 方法,即编译器生成的方法。

于是得出的结论是,modifiers值为4161的方法是public合成桥方法。该article提供了相当全面的概述。