zoukankan      html  css  js  c++  java
  • java 使用反射操作字段

    Field提供两组方法操作字段:

    xxx getXxx(Object obj):获取obj对象该Field的字段值,此处的xxx表示8个基本数据类型。若该字段的类型是引用数据类型则使用,Object get(Object obj);

    void setXxx(Object obj,xxx val):将obj对象的该Field字段设置成val值,此处的xxx表示8个基本数据类型。若该字段的类型是引用数据类型则使用,void set(Object obj, Object value);

     

    package junereflect624;

    //获取字符,并且赋值,然后再取出来(对应的去查看api,比如这个是Field,别的比如Constructor,Method)

    步骤:

    1.获取类

    2.获取字段

    3.赋值(set(c.newInstance(),””));{如果为私有的话设置可接受}

    import java.lang.reflect.Field;

    class Cat{

        private String name;

        public int age;

        private String color;

    }

    public class FieldDemo12 {

        public static void main(String[] args) throws Exception {

            Class<Cat> clz = Cat.class;

            Field[] f = clz.getDeclaredFields();

           

            for (Field field : f) {

                System.out.println(field);

            }

           

            Field fi = clz.getDeclaredField("name");

            System.out.println(fi);

           

            System.out.println(fi.getName());//name

           

            //核心开始

            /**

             *  void set(Object obj, Object value)

    将指定对象变量上此 Field 对象表示的字段设置为指定的新值。

             */

            Cat c = clz.newInstance();

            fi.setAccessible(true);

            fi.set(c, "刘昭");//赋值成功

            Object o = fi.get(c);

            System.out.println(o);//取出成功

           

            fi = clz.getDeclaredField("age");

            fi.setAccessible(true);

            fi.set(c, 21);

            int i = fi.getInt(c);//左边的接受类型已经写成了int,右边的返回类型就也必须是int

            System.out.println(i);//获取成功

        }

    }

    打印

    private java.lang.String junereflect624.Cat.name

    public int junereflect624.Cat.age

    private java.lang.String junereflect624.Cat.color

    private java.lang.String junereflect624.Cat.name

    name

    刘昭

    21

  • 相关阅读:
    深入方法(22)- 指针参数
    深入方法(21)- 开放数组参数
    深入方法(20)- 静态数组参数
    深入方法(19)- 过程中的方法
    深入方法(18)- 在接口区声明的方法都相当于提前声明了
    深入方法(17)- 提前声明
    WNMP(Windows + Nginx + PHP + MySQL) 安装
    Yii2框架 数据库常用操作
    Python 生成器与迭代器 yield 案例分析
    Python VS PHP 基础语法
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11136847.html
Copyright © 2011-2022 走看看