在阅读Spring源码时发现里面有一个很有意思的方法——ReflectionUtils.isPublicStaticFinal(Field field)
,这个方法能够判断一个属性是否是public static final
修饰的,其源码如下:
/**
* Determine whether the given field is a "public static final" constant.
* @param field the field to check
*/
public static boolean isPublicStaticFinal(Field field) {
int modifiers = field.getModifiers();
return (Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers));
}
再看其中的Modifier.isPublic(int modifiers)
方法:
/**
* Return {@code true} if the integer argument includes the
* {@code public} modifier, {@code false} otherwise.
*
* @param mod a set of modifiers
* @return {@code true} if {@code mod} includes the
* {@code public} modifier; {@code false} otherwise.
*/
public static boolean isPublic(int mod) {
return (mod & PUBLIC) != 0;
}
这里发现public
,static
,final
等修饰词在java中其实被encode成编码,例如public static final int PUBLIC = 0x00000001;
,每一位都对应一种修饰词,然后通过&
运算能够判断一个属性是否具有该修饰词。