This question already has an answer here:
How does the getModifiers() method calculate the value for multiple modifiers?

(1个答案)


去年关闭。




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

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

最佳答案

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

为了解决这个问题,4161表示的位字段由3个整数标志组成:1644096。在 Modifier Javadoc中查找这些值,它将告诉您1代表public64代表volatile。令人惊讶的是,因为不能将方法声明为volatile,而4096呢?甚至不在列表中!

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

  • 4096(0x1000)指示一种合成方法,即源代码中不存在的方法。
  • 64(0x0040)不仅表示volatile访问修饰符,还可以用于表示方法是桥接方法,即由编译器生成的方法。

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

    10-06 09:06