javabean反射

明天公司在看,需重构,代码有点乱,可以实现vo的多层反射为map类型。。中间估计有没考虑到的,明天再细看。。。 :cry: :cry: 反射都用不习惯了。。

/**
*
*/
package ledkk.test;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

/**
* @author ledkk
*
*/
public class Reflection {
private static Logger log = Logger.getLogger("Reflection");

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
VOA a = new VOA();
a.setId(123123L);
a.setName("voa");
VOB b = new VOB();
b.setVobName("voB");
a.setVob(b);
List<VOB> vobs = new ArrayList<VOB>();
vobs.add(b);
a.setVobs(vobs);
Map<VOB,String> m = new HashMap<Reflection.VOB, String>();
m.put(b, "hello");
a.setMap(m);
Map<String,Object> map = covertObjToMap(a);
System.out.println(map.get("name")+" " + map.get("id") + " "+map.get("vob"));
Map<String,Object> vob = (Map<String, Object>) map.get("vob");
System.out.println(vob.get("vobName"));
System.out.println(map.get("vobs"));
System.out.println(map.get("map"));
}


public static Map<String,Object> covertObjToMap(Object obj)throws Exception{
Map<String,Object> map = new HashMap<String,Object>();
Class clazz = obj.getClass();
Method[] methods = clazz.getMethods();
for(Method method : methods){
String methodName = method.getName();
Class retType = method.getReturnType();
Class[] params = method.getParameterTypes();
if(methodName.startsWith("set")&&params.length==1){
Class paramsType = params[0];
Package p = paramsType.getPackage();
String getMethodName = methodName.replaceFirst("set", "get");
if(p!=null){
String packageName = p.getName();
Method getMethod = clazz.getMethod(getMethodName, null);
if(getMethod==null){
getMethodName = methodName.replaceFirst("set", "is");
getMethod = clazz.getMethod("", null);
if(getMethod==null){
log.info("getMethod is not find !");
continue;
}
}

Object ret = getMethod.invoke(obj, null);
String fieldName = methodName.replaceFirst("set", "");
fieldName = Character.toLowerCase(fieldName.charAt(0))+fieldName.substring(1);
if(p!=null){
Class retT = ret.getClass();
if(packageName.startsWith("java.util")){
Class[] interfaceClasses = retT.getInterfaces();
if(ret instanceof Collection){
Collection c = (Collection) ret;
Collection list = (Collection) retT.newInstance();
for(Object o : c){
list.add(covertObjToMap(o));
}
map.put(fieldName, list);
continue;
}

if(ret instanceof Map){
Map c = (Map) ret;
Map list = (Map) retT.newInstance();
Set keySet = c.keySet();
for(Object o : keySet){
Object v = c.get(o);
Package oP = o.getClass().getPackage();
Package vP = v.getClass().getPackage();
if(oP!=null&&vP!=null){
String opName = oP.getName();
String vPName = vP.getName();
if((opName.startsWith("java.lang")||opName.startsWith("sun."))&&(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
list.put(o, v);
continue;
}else if((opName.startsWith("java.lang")||opName.startsWith("sun."))&&!(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
list.put(o, covertObjToMap(v));
continue;
}else if(!(opName.startsWith("java.lang")||opName.startsWith("sun."))&&(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
list.put(covertObjToMap(o), v);
continue;
}else if(!(opName.startsWith("java.lang")||opName.startsWith("sun."))&&!(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
list.put(covertObjToMap(o), covertObjToMap(v));
continue;
}
}
list.put(covertObjToMap(o), covertObjToMap(c.get(o)));
}
map.put(fieldName, list);
continue;
}

}
if(!(packageName.startsWith("java.lang")||packageName.startsWith("sun."))){
Object retObj = covertObjToMap(ret);
map.put(fieldName, retObj);
continue;
}
}else{
Object retObj = covertObjToMap(ret);
map.put(fieldName,retObj );
continue;
}
map.put(fieldName, ret);
}
}
}
return map;
}


public static class VOA{
private Long id;
private String name;
private VOB vob;
private List<VOB> vobs;
private Map<VOB,String> map;




/**
* @return the map
*/
public Map<VOB, String> getMap() {
return map;
}
/**
* @param map the map to set
*/
public void setMap(Map<VOB, String> map) {
this.map = map;
}
/**
* @return the vobs
*/
public List<VOB> getVobs() {
return vobs;
}
/**
* @param vobs the vobs to set
*/
public void setVobs(List<VOB> vobs) {
this.vobs = vobs;
}
/**
* @return the id
*/
public Long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Long id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the vob
*/
public VOB getVob() {
return vob;
}
/**
* @param vob the vob to set
*/
public void setVob(VOB vob) {
this.vob = vob;
}

}

public static class VOB{
private String vobName;

/**
* @return the vobName
*/
public String getVobName() {
return vobName;
}

/**
* @param vobName the vobName to set
*/
public void setVobName(String vobName) {
this.vobName = vobName;
}

}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值