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

  • 相关阅读:
    求一个二维数组的最大子矩阵
    在一整型数组中找到此数组中子数组和的最大值
    软件工程个人小项目:写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来
    Redis 为什么这么快?
    在netfarmerwork3.5版本的winform下执行string串中的代码
    c# 反射(Reflection)详解
    string,特殊的引用类型
    c#使用HashSet<T>集合去重
    c# .Net重试机制
    观察者模式
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11136847.html
Copyright © 2011-2022 走看看