集册 Java实例教程 通过反射从字段获取访问修饰符

通过反射从字段获取访问修饰符

欢马劈雪     最近更新时间:2020-01-02 10:19:05

639
通过反射从字段获取访问修饰符

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

import static java.lang.System.out;/**来 自 n o w j a v a . c o m - 时代Java**/


enum Spy {

    BLACK, WHITE

}


public class FieldModifierSpy {

    volatile int share;

    int instance;


    class Inner {

    }
    /**
    时 代 J a v a 公 众 号 - N o w J a v  a . c o m 提供 
    **/


    public static void main(String... args) {

        try {

            Class<?> c = Class.forName(args[0]);

            int searchMods = 0x0;

            for (int i = 1; i < args.length; i++) {

                searchMods |= modifierFromString(args[i]);

            }


            Field[] flds = c.getDeclaredFields();

            out.format("Fields in Class '%s' containing modifiers:  %s%n",

                    c.getName(), Modifier.toString(searchMods));

            boolean found = false;

            for (Field f : flds) {

                int foundMods = f.getModifiers();

                // Require all of the requested modifiers to be present

                if ((foundMods & searchMods) == searchMods) {

                    out.format(

                            "%-8s [ synthetic=%-5b enum_constant=%-5b ]%n",

                            f.getName(), f.isSynthetic(),

                            f.isEnumConstant());

                    found = true;

                }

            }


            if (!found) {

                out.format("No matching fields%n");

            }


            // production code should handle this exception more gracefully

        } catch (ClassNotFoundException x) {

            x.printStackTrace();

        }

    }


    private static int modifierFromString(String s) {

        int m = 0x0;

        if ("public".equals(s))

            m |= Modifier.PUBLIC;

        else if ("protected".equals(s))

            m |= Modifier.PROTECTED;

        else if ("private".equals(s))

            m |= Modifier.PRIVATE;

        else if ("static".equals(s))

            m |= Modifier.STATIC;

        else if ("final".equals(s))

            m |= Modifier.FINAL;

        else if ("transient".equals(s))

            m |= Modifier.TRANSIENT;

        else if ("volatile".equals(s))

            m |= Modifier.VOLATILE;

        return m;

    }

}


展开阅读全文