This question already has an answer here:
How does the getModifiers() method calculate the value for multiple modifiers?
(1个答案)
去年关闭。
我正在使用java反射来获取使用特定Annotation进行注释的方法。它返回两种方法,一种具有修饰符
然后得出的结论是,
(1个答案)
去年关闭。
我正在使用java反射来获取使用特定Annotation进行注释的方法。它返回两种方法,一种具有修饰符
4161
的方法属于接口。但是我检查了修改器的规格,在任何地方都找不到...帮助需要,tks :)最佳答案
modifiers
整数基本上是形成位字段的整数标志的组合。您可以使用静态 Modifier.toString()
方法获取文本表示形式。如果使用此方法,它将告诉您4161
代表public volatile
,而代表是错误的。
为了解决这个问题,4161
表示的位字段由3个整数标志组成:1
,64
和4096
。在 Modifier
Javadoc中查找这些值,它将告诉您1
代表public
和64
代表volatile
。令人惊讶的是,因为不能将方法声明为volatile
,而4096
呢?甚至不在列表中!
答案可以在JVM specification中找到,我们在其中找到:
4096
(0x1000
)指示一种合成方法,即源代码中不存在的方法。 64
(0x0040
)不仅表示volatile
访问修饰符,还可以用于表示方法是桥接方法,即由编译器生成的方法。 然后得出的结论是,
modifiers
值为4161
的方法是public
合成桥方法。该article提供了相当全面的概述。10-06 09:06