Java反射Reflect Modifier修饰符工具类

在查看Java中的Class、Field、Constructor等类的时候,都可以看到这样一个方法getModifiers,返回类、接口、变量、方法等以整数编码的Java语言修饰符;如果要了解这些编码代表什么意思就要使用java.lang.reflect.Modifier类的静态方法和常量对这些编码进行解析。

        People people = new Student();

        int flag = people.getClass().getModifiers();
        System.out.println(flag);
        Method method = people.getClass().getMethod("work", String.class);
        int flagMethod = method.getModifiers();

        Constructor constructor = people.getClass().getConstructor();
        int flagConstructor = constructor.getModifiers();
1.Modifier修饰符工具类

Modifier类提供解码类和成员访问修饰符的静态方法和常量,修饰符集合被表示为具有表示不同的修饰符的不同位置的整数。表示修饰符的常量的值取自“Java虚拟机规范”第4.1,4.4,4.5和4.7节中的表中。
如下示例:

        //判断修饰符是否是public
        System.out.println(Modifier.isPublic(flagMethod));
        //判断修饰符是否是private
        System.out.println(Modifier.isPrivate(flagMethod));
2.访问修饰符编码列表

Modifier类一共提供了12中修饰符的编码表示常量

    /*
     * Access modifier flag constants from tables 4.1, 4.4, 4.5, and 4.7 of
     * <cite>The Java&trade; Virtual Machine Specification</cite>
     */
    public static final int PUBLIC           = 0x00000001;
    public static final int PRIVATE          = 0x00000002;
    public static final int PROTECTED        = 0x00000004;
    public static final int STATIC           = 0x00000008;
    public static final int FINAL            = 0x00000010;
    public static final int SYNCHRONIZED     = 0x00000020;
    public static final int VOLATILE         = 0x00000040;
    public static final int TRANSIENT        = 0x00000080;
    public static final int NATIVE           = 0x00000100;
    public static final int INTERFACE        = 0x00000200;
    public static final int ABSTRACT         = 0x00000400;
    public static final int STRICT           = 0x00000800;
3.解码方法

Modifier类中提供了修饰符对应的解码方法,如下isPublic方法:

    public static boolean isPublic(int mod) {
        return (mod & PUBLIC) != 0;
    }

其他的解码方法都跟上面的类似,就不一一列出来了。

4.Modifier中还提供了其它的几种方法

classModifiers、constructorModifiers、methodModifiers、fieldModifiers,它们的作用是返回一个int值将可以应用于一个类的源语言修饰符组合在一起。

总结:对于Modifer类在平时的开发过程中是很少用到的,但是在框架和底层的开发中会用到;

猜你喜欢

转载自blog.csdn.net/yaomingyang/article/details/81140719
今日推荐