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     }
  • 相关阅读:
    数据不须要自由,但须要做爱
    编程算法基础-3.2自底向上风格
    Linux管道符
    阿里云 oss python3 样例
    6. Laravel5学习笔记:IOC/DI的理解
    LNMP环境搭建——MySQL篇
    在奋斗的日子里,傻笑出来(三)
    捕获海康威视IPCamera图像,转成OpenCV能够处理的图像(一)
    vs 默认的INC和LIB
    一款DIY移动电源的性能
  • 原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/7282104.html
Copyright © 2011-2022 走看看