zoukankan      html  css  js  c++  java
  • 027.2 反射技术 动态获取字段和方法

    ##############################################
    动态获取字段和暴力访问

    String className = "cn.itcast.domain.Person";
    Class clazz = Class.forName(className);
    
    String fieldName = "age";
    
    //获取age字段对象。
    //        Field field = clazz.getField(fieldName);//获取是公共的字段。
    Field field = clazz.getDeclaredField(fieldName);
    
    //        getXXX:获取都是类中公共的成员。
    //        getDeclaredXXX:获取本类中已有的成员。
    //        System.out.println(field);
    
    //对其进行值的设置,必须先有对象。
    Object obj = clazz.newInstance();
    
    
    //通过查找父类AccessiableObject的方法。setAccessiable(true);
    field.setAccessible(true);//取消权限检查,暴力访问。一般不访问私有。
    field.set(obj, 30);//IllegalAccessException:age字段是私有的。
    
    System.out.println(field.get(obj));

    ##################################################
    获取方法

    ##Person.java
    …
    public void show(String name,int age){
        System.out.println("show run...name="+name+",age="+age);
    }
    
    public static void staticShow(){
        System.out.println("static show run");
    }
    
    ...
    ##
    public static void getMethodDemo2() throws Exception {
        String className = "cn.itcast.domain.Person";
        Class clazz = Class.forName(className);
        String methodName = "staticShow";
        
        Method method = clazz.getMethod(methodName, null);
        method.invoke(null, null);
    }
    
    public static void getMethodDemo() throws Exception {
        
        String className = "cn.itcast.domain.Person";
        Class clazz = Class.forName(className);
        
        String methodName = "show";
        
        Method method = clazz.getMethod(methodName, String.class,int.class);
        Object obj = clazz.newInstance();
        method.invoke(obj, "wangcai",20);
    }
  • 相关阅读:
    Dao跨事务调用实现转账功能
    QueryRunner类 的應用,以及ResultSetHandler 接口的实现类
    C3P0数据源的使用
    iOS中UI阶段常用的一些方法
    谷歌云服务器的使用
    Odoo学习之domain表达式【转载】
    odoo 视图继承
    Odoo字段类型详解
    odoo12:命令行
    xpath转义‘
  • 原文地址:https://www.cnblogs.com/-nbloser/p/9842405.html
Copyright © 2011-2022 走看看