简单写个在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());
}