zoukankan      html  css  js  c++  java
  • Java 反射机制:(七)获取运行时类的属性结构

    一、获取属性结构

      1、getFields()

        getFields():获取当前运行时类及其父类中声明为public访问权限的属性

        Demo:

     1     @Test
     2     public void test1() {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getFields():获取当前运行时类及其父类中声明为public访问权限的属性
     8         Field[] fields = clazz.getFields();
     9         for (Field f : fields) {
    10             System.out.println(f);
    11         }
    12     }

        运行结果:

        

      2、getDeclaredFields()

        getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)

        Demo:

     1     @Test
     2     public void test2() {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)
     8         Field[] declaredFields = clazz.getDeclaredFields();
     9         for(Field f : declaredFields){
    10             System.out.println(f);
    11         }
    12     }

         运行结果:

         

      3、getField(String name)

        getField(String name):根据字段名来获取运行时类中 public  修饰的成员变量

        Demo:

     1     @Test
     2     public void test3() throws NoSuchFieldException {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getField():根据字段名来获取当前运行时类中 public 修饰的成员变量
     8         Field field = clazz.getField("id");
     9         System.out.println(field);
    10     }

      4、getDeclaredField(String name)

        getDeclaredField(String name):根据字段名来获取当前运行时类中的成员变量,忽略修饰符;

        Demo:

     1     @Test
     2     public void test4() throws NoSuchFieldException {
     3 
     4         Class clazz = Person.class;
     5 
     6         //获取属性结构
     7         //getField():根据字段名来获取获取当前运行时类中 public 修饰的成员变量
     8         Field field = clazz.getDeclaredField("name");
     9         System.out.println(field);
    10     }

    二、获取成员变量的信息

        一个类中的成员变量可以有修饰符,数据类型和变量名等信息。这些都可以获取:

        常用方法:

    public int getModifiers() 以整数形式返回此Field的修饰符
    
    public Class<?> getType() 得到Field的属性类型
    
    public String getName() 返回Field的名称。

        Demo:

     1     @Test
     2     public void test1(){
     3         Class clazz = Person.class;
     4         Field[] declaredFields = clazz.getDeclaredFields();
     5         for(Field f : declaredFields){
     6             //1.权限修饰符
     7             int modifier = f.getModifiers();
     8             System.out.print(Modifier.toString(modifier) + "	");
     9 
    10             //2.数据类型
    11             Class type = f.getType();
    12             System.out.print(type.getName() + "	");
    13 
    14             //3.变量名
    15             String fName = f.getName();
    16             System.out.print(fName);
    17 
    18             System.out.println();
    19         }
    20     }

         运行结果:

          

        (1)修饰符

          获取的修饰符返回值是一个 int,而不是期望的字符串,这是因为在 Modifier 类中声明了对应的常量值。

          

          调用 Modifier 类的 toString() 方法就可以获取对应值的修饰符。

        (2)数据类型

          调用属性的 getType() 就可以获取数据类型,而它也是一个 Class 对象。

        

    三、

  • 相关阅读:
    Structured Streaming watermark总结
    技术实践第三期|HashTag在Redis集群环境下的使用
    元宇宙带来沉浸式智能登录?你学会了吗?
    技术实践第一期|友盟+开发者平台Node.js重构之路
    2021年度友盟+ APP消息推送白皮书:工作日68点通勤时间消息送达率每日最高
    技术实践第二期|Flutter异常捕获
    注意啦!还没有支持64位系统的App开发者,务必在12月底前完成这件事!
    一位大牛对于写技术博客的一些建议
    国内常用源开发环境换源(flutter换源,python换源,Linux换源,npm换源)
    初识Socket通讯编程(一)
  • 原文地址:https://www.cnblogs.com/niujifei/p/14883136.html
Copyright © 2011-2022 走看看