判断一个属性的修饰词

在阅读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;,每一位都对应一种修饰词,然后通过&运算能够判断一个属性是否具有该修饰词。

猜你喜欢

转载自blog.csdn.net/dalangzhonghangxing/article/details/80037369
今日推荐