LinuxChan的程序园地

前端后端Web开发技术

 

两个很简单的java反射应用

1,是否对java Web中无处不在的Vo ,Dto比较无语呢?想要看看其中的数据,就必需不厌其烦的调用getXXX();所以写了个BaseVo 只要继承它,
然后直接调用它的toString()方法,即可将里面的值都打印出来
    public String toString() {
        Field[] fields 
= this.getClass().getDeclaredFields();
        StringBuffer result 
= new StringBuffer();
        
for (Field field : fields) {
            
// System.out.prIntegerln(field.getName());
            String fieldName = field.getName();
            String methodName 
= "get" + fieldName.substring(01).toUpperCase()
                    
+ fieldName.substring(1);
            result.append(fieldName 
+ ":");
            Method method 
= null;
            Object obj 
= null;
            
try {
                method 
= UserVo.class.getMethod(methodName);
                obj 
= method.invoke(thisnull);
            }
 catch (SecurityException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
 catch (NoSuchMethodException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
 catch (IllegalArgumentException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
 catch (IllegalAccessException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
 catch (InvocationTargetException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }

            
if (obj != null{
                result.append(obj);
            }
 else
                result.append(
"");
            result.append(
"\n");
        }

        
return result.toString();
    }


2,2个同类型的Vo/Dto,需要将一个中的值填充到另外一个里去。正常方法需要set/get 如果字段一多,简直是噩梦。而利用反射,可以轻易实现。
 1    public static void parseVO(Object obj, Object target)
 2            throws Exception, NoSuchMethodException {
 3        for (Field field : obj.getClass().getDeclaredFields()) {
 4            Method getMethod = obj.getClass().getMethod(
 5                    "get" + field.getName().substring(01).toUpperCase()
 6                            + field.getName().substring(1));
 7            Object result = getMethod.invoke(obj);
 8            if (result != null{
 9                Method setMethod = target.getClass().getMethod(
10                        "set" + field.getName().substring(01).toUpperCase()
11                                + field.getName().substring(1), result.getClass());
12                setMethod.invoke(target, result);
13            }

14        }

15    }

posted on 2009-01-23 12:04 LinuxChan 阅读(489) 评论(2)  编辑  收藏

评论

# re: 两个很简单的java反射应用 2009-01-30 09:58 sorcerer

反射的性能问题需要斟酌一下.  回复  更多评论   

# re: 两个很简单的java反射应用 2009-02-13 14:19 Rory

有时候比较简单的也的确没必要用反射,毕竟性能方面的考虑  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(2)

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜