A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yinjiek 中级黑马   /  2013-7-25 18:31  /  1446 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yinjiek 于 2013-7-29 14:29 编辑

public static void main(String[] args) throws Exception {
  ChangeStringValue p1=new ChangeStringValue(3, 5);
  Field fieldy=p1.getClass().getField("y");
  //field不是对象身上的变量,而是类身上
  System.out.println(fieldy.get(p1));
  Field fieldx=p1.getClass().getDeclaredField("x");
  
  fieldx.setAccessible(true);
  System.out.println(fieldx.get(p1));
  changeStringValue(p1);
  System.out.println(p1);
}
private static void changeStringValue(Object obj)throws Exception {
  Field [] fields=obj.getClass().getFields(); //获取class字节码文件
  for(Field f:fields){
   if(f.getType()==String.class){
    String oldValue=(String) f.get(obj);
    String newValue=oldValue.replace('b', 'a');
    f.set(obj, newValue);
   }
  }
}
//实体类
public class ChangeStringValue {
     private int x;
     public int y;
     public String str1="asbbdfsf";
     public String str2="gfdbgsaa";
     public String str3="gfgf";
public ChangeStringValue(int x, int y) {
  super();
  this.x = x;
  this.y = y;
}
@Override
public String toString() {
  
  return str1+":"+str2+":"+str3;
}
     
}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

1 个回复

倒序浏览
首先我不太理解的是你的main方法和changeStringValue怎么会单独定义在类的外部;而且changeStringValue方法和changeStringValue类一样的名字,这样可读性很差。changeStringValue这个方法接收一个Object类型的数据,也就是说你可以给这个方法传入任意类型的对象,它们都可以向上转型为Object(多态).然后该方法获取对象的Class对象,判断是否为String类型,如果是,则进行相应的操作

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马