zoukankan      html  css  js  c++  java
  • class.getFields和class.getDeclareFields的区别

    class.getFields的定义

    • 返回类提供的public域包括超类的共有变量;
      注: 是public,我们平时定义变量一般用的private,如果用getFields是不会获得.

    class.getDeclareFields的定义

    • 返回类中声明的全部域,其中包括私有和受保护的成员,但是不包括父类的成员.
      注: 与getFields不同的就是getDeclareFields能返回声明中所有定义的成员变量,不管你是私有还是保护的,但是仅限于当前类中的不包括父类的成员.

    代码演示

    1.定义一个Account类

    public class Account {
      private String address;
    }
    

    2.定义一个User类继承了Account类

    public class User extends Account{
    
        private  String name;
    
        private  String sex;
    
    }
    

    3.测试类

    public class Test {
    
        public static void main(String[] args) {
            Class clazz = User.class;
            Field[] fields  = clazz.getFields();
            for (Field field : fields){
                System.out.println("getFields: " + field.getName());
            }
            System.out.println("=====================");
            fields  = clazz.getDeclaredFields();
            for (Field field : fields){
                System.out.println("getDeclaredFields: " + field.getName());
            }
    
        }
    }
    

    4.结果

    =====================
    getDeclaredFields: name
    getDeclaredFields: sex
    

    5.改变Account中address的属性为public并打印

    getFields: address
    =====================
    getDeclaredFields: name
    getDeclaredFields: sex
    

    6.改变User中name的属性为public并打印

    getFields: name
    getFields: address
    =====================
    getDeclaredFields: name
    getDeclaredFields: sex
    

    7.综上基本可以验证定义

    • 如果你想获得一个类的所有成员,需要使用getDeclareFields;
    • 如果你只想获得一个类的所有公有成员,可以使用getFields;但是其中还包括父类的公有成员;那小朋友可能要问了,如果我只想获得当前类的公有成员应该怎么做呢?
    • 我觉得可以用getDeclareFields与getFields取交集即可取出当前类的公有成员;

    本篇只是看《Java核心技术卷1》一个随笔记录,与君共勉;

  • 相关阅读:
    How do I add elements to a Scala List?
    Can you share some Scala List class examples?
    How to add elements to a List in Scala
    数据结构和算法学习三,之递归和堆栈
    数据结构和算法学习二,之循环和递归
    数据结构和算法学习一,开篇
    Android Skia和2D图形系统 .
    EGL接口介绍-----Android OpenGL ES底层开发
    OpenGL网络资源
    OpenGL—Android 开机动画源码分析二
  • 原文地址:https://www.cnblogs.com/yantt/p/12916003.html
Copyright © 2011-2022 走看看