zoukankan      html  css  js  c++  java
  • Class获取成员变量信息

    (1)关于获取类的字段有两种方式:getFields()和getDeclaredFields()。

    getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。 

        /**
         * 获取指定类及其子类的public的字段信息
         * @param tempClass
         */
        public static void test1(Class<?> tempClass) {
            Field[] fields= tempClass.getFields();
            for (int i = 0; i < fields.length; i++) {
                System.out.println(fields[i].getName());
            }
        }

    getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

        /**
         * 获取指定类的所有字段信息(包括父类的)
         * @param tempClass
         */
        public static void test2(Class<?> tempClass) {
            Field[] fields= tempClass.getFields();
            for (int i = 0; i < fields.length; i++) {
                System.out.println(fields[i].getName());
            }
        }

    (2)获取一个类及其父类的成员变量

    获取一个类及其父类所有的成员变量

        /**
         * 获取一个类及其父类所有的成员变量
         * @param tempClass
         */
        public static void test3(Class<?> tempClass) {
            List<Field> fieldList = new ArrayList<>();
            fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields()));
            tempClass = tempClass.getSuperclass();
            while (tempClass != null && !tempClass.getName().toLowerCase().equals("java.lang.object")) {
                fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields()));
                 // 得到父类,然后赋给自己
                tempClass = tempClass.getSuperclass();
            }
            
            for (Field f : fieldList) {
                System.out.println(Modifier.toString(f.getModifiers())+" "+f.getName()+"::");
            }
        }

     获取成员变量的访问类型(如果我们需要获取一个类拥有的所有的成员变量,即获取自己所有的以及继承的父类的成员变量,那就需要获取字段的访问类型)

        //获取字段的访问级别(1:public,4:protected)
        int modifier =fields[i].getModifiers();
        if(modifier==1 || modifier==4){
            fieldList.add(fields[i]);
        }

     获取指定类所拥有的字段信息

        /**
         * 获取指定类所拥有的字段信息
         * @param tempClass
         */
        public static void test4(Class<?> tempClass) {
            List<Field> fieldList = new ArrayList<>();
            fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields()));
            tempClass = tempClass.getSuperclass();
            while (tempClass != null && !tempClass.getName().toLowerCase().equals("java.lang.object")) {
                Field[] fields = tempClass.getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    // 获取字段的访问级别(1:public,4:protected)
                    int modifier = fields[i].getModifiers();
                    if (modifier == 1 || modifier == 4) {
                        fieldList.add(fields[i]);
                    }
                }
                // 得到父类,然后赋给自己
                tempClass = tempClass.getSuperclass();
            }
    
            for (Field f : fieldList) {
                System.out.println(Modifier.toString(f.getModifiers()) + " " + f.getName() + "::");
            }
        }
  • 相关阅读:
    Linux下启用异步IO
    ORA-20011 ORA-29913 KUP-11024
    OCP 11G 053题库解析汇总链接(601-712)
    OCP 11G 053题库解析汇总链接(201-400)
    OCP 11G 053题库解析汇总链接(401-600)
    OCP 11G 053题库解析汇总链接(1-200)
    OCP 11G 052题库解析汇总链接
    OCP 11G 051题库解析汇总链接
    Vue外部js引入做为全局变量
    Java实现atoi函数
  • 原文地址:https://www.cnblogs.com/excellencesy/p/12579179.html
Copyright © 2011-2022 走看看