解析java中的字段访问标志

我有一个任务,我必须解析java .class文件的字段访问标志.
可以在此处找到.class文件的规范:Class File Format(第26页& 27具有访问标志和十六进制数).

这很好,我可以做到这一点无后顾之忧.
我的问题是有很多组合.

我知道公共,私人和受保护是相互排斥的,这在一定程度上减少了组合.最终和瞬态也是相互排斥的.然而其余的则没有.

目前,我有一个大的switch语句来进行比较.我读取访问标志的十六进制值,然后递增一个计数器,具体取决于它是公共的,私有的还是受保护的.这样可以正常工作,但是在switch语句中列出每个组合似乎很麻烦.即公共静态,公共决赛,公共静态决赛等.

我想在访问标志和公共,私有或受保护的适当十六进制值上做模数,但public是0x0001,所以这不起作用.

有没有其他人对我如何减少switch语句中的案例数有任何想法?

最佳答案
问题是什么?规范说它是一个标志,这意味着您应该将值视为二进制数,并且您可以通过执行按位AND来测试是否设置了特定值.

例如

/*
ACC_VOLATILE = 0x0040 = 10000000
ACC_PUBLIC   = 0x0001 = 00000001
Public and volatile is= 10000001
*/


publicCount += flag & ACC_PUBLIC > 0 ? 1 : 0;
volatileCount += flag & ACC_VOLATILE > 0 ? 1 : 0;

转载注明原文:解析java中的字段访问标志 - 代码日志