码迷,mamicode.com
首页 > 其他好文 > 详细

使用反射循环获取Bean中的属性

时间:2019-12-31 12:27:25      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:++   不同   map   static   except   html   tps   不能   积累   

平时在做项目的时候,会遇到一些比较奇葩的Bean,比如好多重复的只是序号不同的属性,例如:imgPath1,imgPath2,.....imgPath10。甚至更多(再多就是设计的问题了,对于维护的系统当然也不会去重新设计Bean,只能在有限的范围内进行优化)对于这样的属性获取时因为get方法不同看起来不能循环操作,实际上是可以使用循环的。

对象Bean

列出5个属性作为参考,省略了get和Set方法

public class ForBean {
    
    private String imgPath1 = null;
    
    private String imgPath2 = null;
    
    private String imgPath3 = null;
    
    private String imgPath4 = null;
    
    private String imgPath5 = null;

}

不推荐的写法

大多数人遇到这样的Bean时会用一下的方法写,要是属性有10个,20个,那就得重复多次。虽然不会有问题,但是显得很不优雅。

public static void main(String[] args) {
    
    ForBean forBean = new ForBean();
    
    forBean.setImgPath1("path1");
    forBean.setImgPath2("path2");
    forBean.setImgPath3("path3");
    forBean.setImgPath4("path4");
    forBean.setImgPath5("path5");
    
    Map<String,String> map = new HashMap<String,String>();
    map.put("imgPath1", forBean.getImgPath1());
    map.put("imgPath2", forBean.getImgPath2());
    map.put("imgPath3", forBean.getImgPath3());
    map.put("imgPath4", forBean.getImgPath4());
    map.put("imgPath5", forBean.getImgPath5());

    System.out.println(map.toString());

}

以上代码输出的结果如下

{imgPath2=path2, imgPath3=path3, imgPath1=path1, imgPath4=path4, imgPath5=path5}

使用反射循环获取

public static void main(String[] args) {
    
    ForBean forBean = new ForBean();
    
    forBean.setImgPath1("path1");
    forBean.setImgPath2("path2");
    forBean.setImgPath3("path3");
    forBean.setImgPath4("path4");
    forBean.setImgPath5("path5");
                
    Map<String,String> map2 = new HashMap<String,String>();
    try {
        Class clazz = Class.forName("ForBean");
        for(int i=1; i <= 5; i++) {
            Method method = clazz.getMethod("getImgPath"+i);
            String path = (String)method.invoke(forBean);
            map2.put("imgPath"+i, path);
        }
        
    } catch (Exception e) {
        e.printStackTrace();
    }
        
    System.out.println(map2.toString());

}

当然使用反射后的方法输出的结果如下,和之前的结果是一样的。虽然这样的一个改动也没有说很厉害,只是觉得代码大家都会写,不光要是会写,主要目标还是写好,这就要平时多思考多积累。

{imgPath2=path2, imgPath3=path3, imgPath1=path1, imgPath4=path4, imgPath5=path5}

反射知识

想回顾反射的知识可以参考我之前写的博客
反射获取一个类的私有方法
https://www.cnblogs.com/ghq120/p/8439204.html

使用反射循环获取Bean中的属性

标签:++   不同   map   static   except   html   tps   不能   积累   

原文地址:https://www.cnblogs.com/ghq120/p/12123470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!