• 通过反射机制操作某个类的属性


    实体类

     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字符串。

    版权归本人所有,转载请注明出处。
  • 相关阅读:
    [音乐欣赏]为你读诗背景音乐,音乐电台
    [读书笔记]1368个单词就够了
    [读书笔记]项目管理实战:Microsoft Project精髓与方法
    [音乐欣赏]动力火车 艾琳娜
    [办公自动化]PDF大小不一如何调整
    [读书笔记]左手数据,右手图表
    [写作新思路]数据分析
    揪出Android流氓软件
    [办公自动化]Wlan无法启动,无法连接无线网wifi,所有无线网都搜索不到
    日常UVA题目英语积累
  • 原文地址:https://www.cnblogs.com/wqfeng-2017/p/6692168.html
Copyright © 2020-2023  润新知