zoukankan      html  css  js  c++  java
  • 通过反射机制操作某个类的属性

    实体类

     1 import java.lang.reflect.Field;
     2 import java.util.Date;
     3 
     4 public class Program {
     5     public Program() {
     6     }
     7 
     8     public Program(String str, Date date, int i) {
     9         this.str = str;
    10         this.date = date;
    11         this.i = i;
    12     }
    13 
    14     private String str = "Hello";
    15     private Date date = new Date();
    16     protected int i = 0;
    17 
    18     public int getI() {
    19         return i;
    20     }
    21 
    22     public String getStr() {
    23         return str;
    24     }

    测试方法

     1  public static void main(String[] args) throws IllegalArgumentException,
     2             IllegalAccessException {
     3         try {
     4             Program program = new Program();
     5             Class progClass = program.getClass();
     6             //通过反射机制,获取到类Program中的str
     7             Field strField1 = progClass.getDeclaredField("str");
     8             //输出private java.lang.String Program.str            
     9             System.out.println("Field found: " + strField1.toString());
    10 
    11             //同上
    12             Field dateField = progClass.getDeclaredField("date");
    13             System.out.println("Field found: " + dateField.toString());
    14             //同上
    15             Field iField = progClass.getDeclaredField("i");
    16             System.out.println("Field found: " + iField.toString());
    17             
    18             //我想说的是这一点,这里能获取到类Program中的str并对其修改。
    19             //Program类中没有对str设置的setStr()方法,而且使用了private,
    20             //这是不允许访问的。
    21             //但是我们能通过反射机制,从而获取private类型的值,并直接改。
    22             Field strField = progClass.getDeclaredField("str");
    23             strField.set(program, "我是Str字符串。");
    24             //输出:我是Str字符串。
    25             System.out.println(program.getStr());
    26             
    27         } catch (NoSuchFieldException ex) {
    28             System.out.println(ex.toString());
    29         }
    30     }
    31 }

    输出是:

    Field found: private java.lang.String Program.str
    Field found: private java.util.Date Program.date
    Field found: protected int Program.i
    我是Str字符串。

    版权归本人所有,转载请注明出处。
  • 相关阅读:
    JVM
    Java反射和动态代理
    JMS(Java消息服务)
    Java多线程及并发
    zookeeper集群自动启动脚本
    zookeeper命令行客户端
    Zookeeper集群搭建步骤及相关知识点深入了解
    MySQL server PID file could not be found!
    Linux下jdk、Tomcat、MySQL的安装
    修改Linux的基本配置
  • 原文地址:https://www.cnblogs.com/wqfeng-2017/p/6692168.html
Copyright © 2011-2022 走看看