zoukankan      html  css  js  c++  java
  • java反射机制(2)

    通过反射获取类之后,就要通过反射来进行对类的操作。比如说对类的属性赋值,调用某个方法等。

    例:

     1 @Test
     2     public void testAssignment() {
     3         try {
     4             Class<?>clazz=Class.forName("basic.reflect.Person");
     5             //获取无参的构造函数
     6             Constructor<?> constructor=clazz
     7                     .getConstructor(new Class[]{});
     8             Object instance=constructor.newInstance(new Object[] {});
     9             //获取所有的方法
    10             Method[] methods=clazz.getDeclaredMethods();
    11             for(Method m:methods) {
    12                 String methodName=m.getName();
    13                 boolean flag=methodName.startsWith("set");
    14                 if(flag) {
    15                     //从第3个字符开始切割
    16                     String fieldName=methodName.substring(3);
    17                     //将首字符变小写并连接后续字符
    18                     fieldName=fieldName.substring(0, 1).toLowerCase()+fieldName.substring(1);
    19                     //获取指定属性
    20                     Field field=clazz.getDeclaredField(fieldName);
    21                     //获取属性的声明类型
    22                     Class<?> type=field.getType();
    23                     if(type==Integer.class) {
    24                         //在具有指定参数的方法上调用此方法对象的底层方法
    25                         m.invoke(instance,new Object[] {1});
    26                     }
    27                     //对比属性并且指定调用的方法所设置的属性
    28                     if (type==String.class&&"address".equals(fieldName)) {
    29                         m.invoke(instance, new Object[] {"北京"});
    30                     }
    31                     //同上
    32                     if(type==String.class&&"name".equals(fieldName)) {
    33                         m.invoke(instance, new Object[] {"李四"});
    34                     }
    35                 }
    36             }
    37             System.out.println(instance);
    38             
    39         } catch (Exception e) {
    40             // TODO Auto-generated catch block
    41             e.printStackTrace();
    42         }
    43         
    44     }
  • 相关阅读:
    如遇临时表无法删除
    ORA-00054:resource busy and acquire with nowait specified解决方法
    查看用户建立详细原语句
    dbtool部署
    启动uiautomatorview 提示无法初始化主类
    运行虚拟机报错:CPU acceleration status: HAXM is not installed on this machine
    Appium-Python-Windows 环境搭建
    Vagrant安装Docker
    XPath
    Selenium之元素定位
  • 原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/7282104.html
Copyright © 2011-2022 走看看