X.d 笔记

小Web,大世界

0%

Java 使用反射支接返回对象

简单写个在java里面通过反射功能使字符串转对象的方法。

首先对象很简单,只有一个id与name:

public class DataInfo {
    private String id ="";
    private String name = "";
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    } 
}

转换方法如下:

    /**
     * 使字符串转换为对象
     * @param str  需要转换的字符串
     * @param classOb 需要转换的对象类型
     * @return T 需要转换的对象类型的实体
     * */
    public static <T> T convert(String str, Class<T> classOb){
        //返回的对象  
        T rtnclass = null;

          //解析数据,DEMO原因就直接用正则写了,实际需要JSON,XML等各种对象解析出数据
          Map<String, String> map = new HashMap<String, String>();
          Pattern p = Pattern.compile("\\{(.+):(.+),(.+):(.+)\\}");
          Matcher m = p.matcher(str);
          if(m.find()){
              map.put(m.group(1).toLowerCase(), m.group(2));
              map.put(m.group(3).toLowerCase(), m.group(4));
          }

          //根据数据生成对象实体
          try {
            rtnclass = (T) classOb.newInstance();
            Method[] methods = rtnclass.getClass().getMethods();
            for (int i = 0; i < methods.length; i++) {
                Method method = methods[i];
                String name = method.getName();
                if(name.startsWith("set")){
                    if(map.get(name.substring(3).toLowerCase())!=null){
                        method.invoke(rtnclass, map.get(name.substring(3).toLowerCase()));
                    }
                }
            }
        } catch (InstantiationException e) {
        } catch (IllegalAccessException e) {
        } catch (IllegalArgumentException e) {
        } catch (InvocationTargetException e) {
        }
          return rtnclass;
      }
    }

最后测试一下,支接用个json试试

  public static void main(String[] args){
          DataInfo app =  ConvertUtil.convert("{id:12347,name:jsondemo}", DataInfo.class);
          //这里,我只需要第二个参数为DataInfo.class,即可将一个字符串转化为DataInfo对象并返回,没有任何强制转换
          System.out.println(app.getId());
          System.out.println(app.getName());
      }