zoukankan      html  css  js  c++  java
  • 反射调用方法时的两种情况,走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);
      
     }

  • 相关阅读:
    Django -- 多对多建表增删改查
    Django -- 一对多建表增删改查
    Django -- 图书管理系统
    Django -- 基础
    前端 -- jQuery
    前端 -- JavaScript-BOM
    前端 -- JavaScript-DOM
    前端 -- JavaScript基础
    前端 -- HTML块级标签
    linux目录结构
  • 原文地址:https://www.cnblogs.com/345214483-qq/p/4121891.html
Copyright © 2011-2022 走看看