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

public class Test1 {
/**
   public void setProperty(Object obj, String propertyName, Object value){   
  }
  * @param args
  */

    private static String kind="dog";
public static void main(String[] args) {
  // TODO Auto-generated method stub
       Test1 a = new Test1();
       setProperty sp =new setProperty();
       //调用setProperty类中的方法,并将所要改变的值传递过去
       sp.setProperty(a, "kind", "dog");
       System.out.print("动物种类:"+Test1.kind);
}
}
class setProperty{
public void setProperty(Object obj, String propertyName, Object value)
{   
  try {
   //获得反射对象
   Field field = obj.getClass().getDeclaredField(propertyName);
   //设置可以访问变量
   field.setAccessible(true);
   //将kind由dog改变为cat
   field.set(obj,"cat");
  } catch (Exception e) {
   //改变失败则输出修改失败"修改失败"
   System.out.println("修改失败");
       }
    }
}



24 个回复

正序浏览
给力~~~~~
回复 使用道具 举报
表示没有看懂。
回复 使用道具 举报
LLLLL 中级黑马 2015-12-2 16:38:37
23#
666666666666666666666
回复 使用道具 举报
解决了一大难题啊,
回复 使用道具 举报
牛叉】,,,,,,,
回复 使用道具 举报
学习了 谢谢
回复 使用道具 举报
不错收获很多,入学考试应该用不到javabean吧,应该只是基础和反射部分吧!!
回复 使用道具 举报
propertyName的属性的值设置为value.
回复 使用道具 举报
本帖最后由 怀英 于 2015-7-17 22:20 编辑

我没有写main方法里面的实现,感觉题目没有说要写,只要写个方法就行了。暴力反射我用了,因为不确定它到底是不是public的。
  1. import java.lang.reflect.Field;

  2. /*
  3. * 4、
  4. * 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.   
  5. *        
  6. * public void setProperty(Object obj, String propertyName, Object value){...}
  7. *
  8. * hy_think:
  9. * 仅仅只要写一个方法就行,,,
  10. * ,,,>设置属性值,,》但我不知道这个属性是什么,,》
  11. *
  12. * ,,》只知道他有个属性交property,,,》并且要传入的值是value
  13. *
  14. * ,,》用反射做
  15. *
  16. * 1.取得object类的class文件
  17. * 2.取得属性
  18. * 3.设置属性的访问权限为true
  19. * 4.将值赋给属性
  20. *
  21. */
  22. public class Demo4 {

  23.         /**
  24.          * @param args
  25.          */
  26.         public static void main(String[] args) {
  27.                 // TODO Auto-generated method stub

  28.         }
  29.         
  30.         public void setProperty(Object obj, String propertyName, Object value){
  31.                 try {
  32.                         Class clazz = obj.getClass();
  33.                         Field fdPN = clazz.getDeclaredField("propertyName");
  34.                         fdPN.setAccessible(true);
  35.                         fdPN.set(obj, value);
  36.                         
  37.                 } catch (NoSuchFieldException e) {
  38.                         // TODO Auto-generated catch block
  39.                         e.printStackTrace();
  40.                 } catch (SecurityException e) {
  41.                         // TODO Auto-generated catch block
  42.                         e.printStackTrace();
  43.                 } catch (IllegalArgumentException e) {
  44.                         // TODO Auto-generated catch block
  45.                         e.printStackTrace();
  46.                 } catch (IllegalAccessException e) {
  47.                         // TODO Auto-generated catch block
  48.                         e.printStackTrace();
  49.                 }
  50.         }

  51. }
复制代码
回复 使用道具 举报 1 0
领教了,,
回复 使用道具 举报
不错   反射没学好  可惜了
回复 使用道具 举报
赞一下~!
回复 使用道具 举报
感谢分享。
回复 使用道具 举报
很好,受教了
回复 使用道具 举报
来学习了
回复 使用道具 举报
﹍清尘〢 发表于 2014-11-20 14:19
小弟的代码,感觉没必要用暴力反射啊,因为好像没必要封装类里面的变量,请指教:

看了下你的代码,把我自己代码改对了!:handshake
回复 使用道具 举报
小弟的代码,感觉没必要用暴力反射啊,因为好像没必要封装类里面的变量,请指教:
  1. public class Test3 {
  2.         public static void main(String[] args) {
  3.                 //定义一个字符串,以便识别传入后是否设置值
  4.                 String pp = "oldvalue";
  5.                 //实例化Demo类的对象
  6.                 Demo1 d = new Demo1(pp);
  7.                 //打印未设置时候的d.propertyName值
  8.                 System.out.println(d.propertyName);
  9.                 //调用setProperty,将Demo的Obj对象传入,修改Demo类中名为propertyName的值为value
  10.                 setProperty(d,"propertyName","value");
  11.                 //打印设置后的d.propertyName值
  12.                 System.out.println(d.propertyName);
  13.         }
  14.         //此方法可将obj对象中名为propertyName的属性的值设置为value.   
  15.         public static void setProperty(Object obj,String propertyName,Object value){
  16.                 //捕获异常
  17.                 try {
  18.                         //定义Field使用反射,得到传入的名为“propertyName”的变量的字节码
  19.                         Field field = obj.getClass().getField(propertyName);
  20.                         //设置该“propertyName”的值为value
  21.                         field.set(obj, value);
  22.                 }
  23.                 //处理异常
  24.                 catch (Exception e) {
  25.                         //改变失败则输出修改失败"修改失败"
  26.                         System.out.println("修改失败");
  27.                 }       
  28.         }       
  29. }
  30. //测试类
  31. class Demo1{
  32.         //定义一个字符串
  33.         public String propertyName = "";
  34.         //定义一个带参构造方法,传入一个String类型的字符串
  35.         public Demo1(String propertyName) {
  36.                 //继承空参构造函数
  37.                 super();
  38.                 //赋值
  39.                 this.propertyName = propertyName;
  40.         }       
  41. }
复制代码





回复 使用道具 举报
Dale 中级黑马 2014-9-13 17:11:07
8#
ysdolls 发表于 2014-8-26 12:48
正巧刚刚做完这道题,上网查下做的对不对,搜到这里。发一下我的吧

表示卡不懂!大哥!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马