java.lang.reflect.Method中的“ 4161”修饰符是什么意思

Ada*_*s.H 2 java reflection

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

在此处输入图片说明

Rob*_*sen 8

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

进行分解,位字段表示由4161由3个整数国旗:1644096。在ModifierJavadoc中查询这些值,它将告诉您1代表public64代表volatile。令人惊讶的是,因为方法不能声明为volatile,那又如何4096呢?甚至不在列表中!

答案可以在JVM规范中找到,我们发现:

  • 40960x1000)表示综合方法,即源代码中不存在的方法。
  • 640x0040)不仅表示volatile访问修饰符,而且还可以用于表示方法是桥接方法,即由编译器生成的方法。

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

  • @Vulcan似乎是一个合成标志:/sf/ask/597853791/将添加答案。 (2认同)