博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射
阅读量:6595 次
发布时间:2019-06-24

本文共 1429 字,大约阅读时间需要 4 分钟。

java在反射时候经常用到了 Field 类。

代码:

public class ReflectTest {//需要反射的类

  private String fname;
  private String lname;

public ReflectTest(String fname, String lname) {

  this.fname = fname;
  this.lname = lname;
}

public static void main(String[] args) {

  try {
    ReflectTest rt = new ReflectTest("java", "aspectj");
    fun(rt);
  } catch (Exception e) {
    e.printStackTrace();
  }
}

  public static void fun(Object obj) throws Exception {

    Field[] fields = obj.getClass().getDeclaredFields();//getDeclaredFields()返回Class中所有的字段,包括私有字段;
    System.out.println("替换之前的:");
    for (Field field : fields) {
    System.out.println(field.getName() + "=" + field.get(obj));
    if (field.getType().equals(java.lang.String.class)) {//field.getType(): 获取属性声明时类型对象(返回class对象)
      field.setAccessible(true);//设置这些属性是可以访问的
      // 必须设置为 true 才可以修改成员变量
      String org = (String) field.get(obj);//获得此属性的值
      field.set(obj, org.replaceAll("a", "b"));
    }
}
  System.out.println("替换之后的:");
    for (Field field : fields) {
    System.out.println(field.getName() + "=" + field.get(obj));
  }
}
}

 

            //得到一个字段          Field fieldY = pt1.getClass().getField("y"); //y 是变量名          //fieldY的值是5么?? 大错特错          //fieldY和pt1根本没有什么关系,你看,是pt1.getClass(),是 字节码 啊          //不是pt1对象身上的变量,而是类上的,要用它取某个对象上对应的值          //要这样          System.out.println(fieldY.get(pt1)); //这才是5  

转载于:https://www.cnblogs.com/zhaoleigege/p/5695771.html

你可能感兴趣的文章
C++使用hiredis连接带密码的redis服务
查看>>
SQL SERVER 批量生成编号
查看>>
thinkjs——一个字段一种数字代表两种状态
查看>>
C++的那些事:类的拷贝控制
查看>>
numpy得到数组的index
查看>>
JSP页面重定向
查看>>
RecyclerView具体解释
查看>>
vue2.0 vue-loader
查看>>
美国埃博拉患者是怎样治愈的?
查看>>
[离散时间信号处理学习笔记] 9. z变换性质
查看>>
简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录
查看>>
关系型数据库的分片原则
查看>>
浅谈线段树中加与乘标记的下放
查看>>
【IDEA】IDEA中maven项目pom.xml依赖不生效解决
查看>>
scrapy-redis(七):部署scrapy
查看>>
Redis集群
查看>>
建立自己的NuGet服务器
查看>>
【编程之美】中国象棋将帅问题
查看>>
DroidCam 一片 红色 解决办法
查看>>
WINDOWS XP sp2 Platfrom SDK下载地址
查看>>