• 反射调用方法时的两种情况,走get set和不走get set


    @Test
     public void test1() throws Exception{
      //获取User类
      Class class1=Class.forName("cn.jbit.bean.User");
      //获取所有字段包括私有的
      Field[] fileds=class1.getDeclaredFields();
      for (Field field : fileds) {
       System.out.println(field.getName());
      }
      //获取所有方法
      Method[] methods = class1.getDeclaredMethods();
      for (Method method : methods) {
       System.out.println(method.getName());
      }
      //获取构造方法
      Constructor[] constructors = class1.getDeclaredConstructors();
      for (Constructor constructor : constructors) {
       System.out.println("构造方法:"+constructor);
      }
      //调用所有方法
      Method method = class1.getMethod("show");
      Object obj=class1.newInstance();
      //method.invoke(obj);
      //调用set方法赋值
      Field field = class1.getDeclaredField("name");
      //设置为Accessible可进入的,因为name是自由字段
      field.setAccessible(true);
      //给私有字段赋值
      field.set(obj,"sp");
      method.invoke(obj);
     }

     //上面的给私有字段赋值的方法是不走get,set方法的,那么有时在get,set方法里进行判断就不管用了
     //这时需要用PropertyDescriptor
     @Test
     public void test2() throws Exception{
      //获取User类
      Class class1=Class.forName("cn.jbit.bean.User");
      //获取所有字段包括私有的
      Field[] fileds=class1.getDeclaredFields();
      for (Field field : fileds) {
       System.out.println(field.getName());
      }
      //获取所有方法
      Method[] methods = class1.getDeclaredMethods();
      for (Method method : methods) {
       System.out.println(method.getName());
      }
      //调用所有方法
      Method method = class1.getMethod("show");
      Object obj=class1.newInstance();
      //method.invoke(obj);
      //调用set方法赋值
      Field field = class1.getDeclaredField("name");
      //属性描述
      PropertyDescriptor pd=new PropertyDescriptor("name", class1);
      //调用
      Method method2 = pd.getWriteMethod();
      method2.invoke(obj, "小红");
      Method method3 = pd.getReadMethod();
      String name = method3.invoke(obj).toString();
      System.out.println(name);
      
     }

  • 相关阅读:
    JDBC数据库程序连接MySQL
    java中image显示图片,随上下左右键移动
    java匿名类关闭窗口
    一个通用的SQL客户程序
    我的第一个JavaApplet程序
    Java编译错误“No enclosing instance of type AA is accessible. Must qualify the allocation with an enclosing instance of type SimpleTh
    Java MessagePanel
    线程通信,生产者消费者问题(Java)
    Java程序显示正在运行的时钟(timer类)
    百度star2012初赛第一场的题目
  • 原文地址:https://www.cnblogs.com/345214483-qq/p/4121891.html
Copyright © 2020-2023  润新知