• java反射机制


    今天看到同事写的程序补丁,用的反射,感觉自己好弱啊,都没有用过。唉,差距怎么这么大呢。。。

    反射存在的理由是为了解决你不知道这个类的构造的情况下,想要对这个类进行操作。比如hibernate中对应数据库的model类,当然这得是个javabean,严格的根据属性即表中的字段去调用相应方法,进而设置属性值。

    引起我注意的代码是这样的。

    1  Method get = bean.getClass().getMethod( ClassUtils.getClassGetName(patch[2]));
    2             Method set = bean.getClass().getMethod( ClassUtils.getClassSetName(patch[2]),get.getReturnType());
    3             Object oldv = get.invoke(bean);
    4             if(get.getReturnType().getSimpleName().equals("String")){
    5                 set.invoke( bean, nval);
    6             }else{
    7                 set.invoke( bean, Integer.valueOf(nval));
    8             }

    其中两点,getMethod方法和invoke方法。

    public Object invoke(Object obj,Object[] args) throws IllegalAccessException, IllegalArgumentException,InvocationTargetException

    参数obj 代表的是对应类的实例,参数args对应的是此方法中要求的形参类型。注意obj必须是个实例,否则你去改变它的值没有任何意义不是吗。

    public Method getMethod(String name, Class[] parameterTypes) throws NoSuchMethodException, SecurityException

    参数name是你的方法的名字,parameterTypes是形参类型,如果没有参数,当然可以为空。为什么还要指定参数类型,你懂的。

    这些个类型都是在包java.lang.reflect里面的。

    关于详细的反射,下面这段代码是我从网上看到的,写的比较详细。

     1 public static void printMethods(Class cl)
     2     {
     3         Method[] methods =cl.getDeclaredMethods();//返回一个包含方法对象的数组
     4         for(Method m : methods)//循环该类的每个方法
     5         {
     6         Class retType = m.getReturnType();//该方法的返回类型,
     7         String name = m.getName();//获得方法名
     8         System.out.print(" "+Modifier.toString(m.getModifiers()));//打印方法修饰符
     9         System.out.print(" "+retType.getName() + " " + name +"(");
    10     
    11         Class[] paramTypes = m.getParameterTypes();//获得一个方法参数数组(getparameterTypes用于返回一个描述参数类型的Class对象数组)
    12     
    13         for(int j = 0 ; j < paramTypes.length ; j++)
    14     
    15         {
    16         if ( j > 0 ) System.out.print(" , ");   //如果有多个参数,中间则用逗号隔开,否则直接打印参数
    17         System.out.print (paramTypes[ j ].getName());
    18         }
    19         System.out.println (" );");
    20         }
    21     } 
  • 相关阅读:
    tomcat控制台运行窗口中文乱码
    jquery html5 file 上传图片显示图片
    修改输入框placeholder文字默认颜色-webkit-input-placeholder
    H5移动端知识点总结
    PostgreSQL
    PostgreSQL
    Hexo系列(2)
    SQL
    Java笔记-序列化的注意点
    js、css外部文件的相对路径问题
  • 原文地址:https://www.cnblogs.com/lan0725/p/3080302.html
Copyright © 2020-2023  润新知