依据Map 动态生成一个类 动态打印

根据Map 动态生成一个类 动态打印

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import cn.com.css.zero.student;


public class TestCopy {

 /**
  * copy map to class
  * @throws ClassNotFoundException
  * @throws InvocationTargetException
  * @throws IllegalAccessException
  * @throws IllegalArgumentException
  * @throws InstantiationException
  */
 public static void copyMapToClass(student student, Map map) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException{
  
  Set set = map.keySet();
  Map mapProperty = new HashMap(); 
     
     Class cla = student.getClass();
    
 
     //获得属性
     Field[] f=cla.getDeclaredFields();
     //获得方法
     Method[] methods = cla.getDeclaredMethods();
     Map mapMethod = new HashMap();
     for(int i=0; i<methods.length; i++){
     Method m= methods[i];
     mapMethod.put(m.getName(), m);
     }
     //解析属性
     for (Field field : f) {
     //获得属性名称
      String propertyName = field.getName(); 
      //获得属性类型
      String propertyType = field.getType().toString(); 
  
      //属性类型
      propertyType = getPropertyName(propertyType);
      
      mapProperty.put(propertyName, propertyType); 
     }   
     //实际属性
  Set set2 = mapProperty.keySet();  
  for(Object objs: set){
   Object type = mapProperty.get(objs);
      if(type!=null && !type.toString().trim().equals("")){
       //获得方法名
       String methodName = getGetMethodName(objs.toString());
       //获得实际方法
       Object objMethod = mapMethod.get(methodName);
       if(objMethod!=null){
        Method method = (Method)objMethod;
        
        //获得属性类型
        Object  proType = mapProperty.get(objs);
        if(proType==null || proType.toString().trim().equals("")){
         continue;
        }
        String propertyType = proType.toString();
        if(propertyType.toString().trim().equals("String")){
         method.invoke(student, map.get(objs));
        }
        if(propertyType.toString().trim().equals("Integer") || propertyType.toString().trim().equals("int")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Integer value = Integer.parseInt( map.get(objs).toString() );
          method.invoke(student, value);
         } 
        }
        
        if(propertyType.toString().trim().equals("Byte") || propertyType.toString().trim().equals("byte")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Byte value = Byte.parseByte( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Short") || propertyType.toString().trim().equals("short")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Short value =  Short.parseShort( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Long") || propertyType.toString().trim().equals("long")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Long value =  Long.parseLong( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Double") || propertyType.toString().trim().equals("double")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Double value =  Double.parseDouble( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Float") || propertyType.toString().trim().equals("float")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Float value =  Float.parseFloat( map.get(objs).toString() );
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Boolean") || propertyType.toString().trim().equals("boolean")){
         if(objs!=null && !objs.toString().trim().equals("")){
          Boolean value =  Boolean.valueOf(map.get(objs).toString());
          method.invoke(student, value);
         }
        }
        
        if(propertyType.toString().trim().equals("Character") || propertyType.toString().trim().equals("char")){
           if(objs!=null && !objs.toString().trim().equals("")){
             Character value = Character.valueOf( map.get( objs ).toString().toCharArray()[0] );
          method.invoke(student, value);
         }
         
        }
       }
      }
  }  
 }
 
 
 /**
  * 第一个字母大写
  * @param property
  * @return
  */
 public static String getGetMethodName(String property){
     
     String reStr = "";
     if(property==null || property.toString().trim().equals("")){
      return reStr;
     }
    
     char[] chars = property.toCharArray();
     if(chars==null || chars.length == 0){
      return reStr;
     } 
    
     String c = chars[0] + "";
     c = c.toUpperCase();
     char c1 = c.toCharArray()[0];
     chars[0] = c1;
     reStr = new String(chars);
     reStr =  "set" + reStr;
     return reStr;
 }
 
 
 
 /**
  * 第一个字母大写
  * @param property
  * @return
  */
 public static String getSetMethodName(String property){
     
     String reStr = "";
     if(property==null || property.toString().trim().equals("")){
      return reStr;
     }
    
     char[] chars = property.toCharArray();
     if(chars==null || chars.length == 0){
      return reStr;
     } 
    
     String c = chars[0] + "";
     c = c.toUpperCase();
     char c1 = c.toCharArray()[0];
     chars[0] = c1;
     reStr = new String(chars);
     reStr =  "get" + reStr;
     return reStr;
 }
 
 
 
 /**
  * 获取一个字符串中最后一个.之后的内容
  * @param property
  * @return
  */
 public  static String getPropertyName(String property){ 
  String initValue = property;
  int pos = property.indexOf(".");
  String reStr = property;
  int re = pos;
  while(pos>0 ){
   property = property.substring(pos + 1);
   pos = property.indexOf(".");
   reStr = property;
   re = pos;
  }  
  return reStr;
 }
 
 
 
 
 public static String toString(Object obj) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
  
  StringBuffer sb = new StringBuffer();
  sb.append(obj.toString());
  sb.append("(") ;
  sb.append("\n");
    
     Class cla = obj.getClass();
     Field[] fields = cla.getDeclaredFields();
   
     Method[] methods = cla.getDeclaredMethods();
     Map mapMethod = new HashMap();
   
     for(Method method : methods){
      mapMethod.put(method.getName(), method);
     }
      for (Field field : fields) {
       //获得属性名称
      String propertyName = field.getName(); 
      String methodName = getSetMethodName(propertyName);
      //获得实际方法
      Object objMethod = mapMethod.get(methodName);
      if(objMethod!=null){
       Method method = (Method)objMethod;
       //调用方法
       Object returnValue = method.invoke(obj);
        sb.append("\t");
        sb.append(field.getName() + " : " + returnValue);
        sb.append("\n") ;
      } else {
       methodName = methodName.replaceAll("get", "is");
       objMethod = mapMethod.get(methodName);
       if(objMethod!=null){
        Method method = (Method)objMethod;
        //调用方法
        Object returnValue = method.invoke(obj);
         sb.append("\t");
         sb.append(field.getName() + " : " + returnValue);
         sb.append("\n") ;
       }
      }
     }
  sb.append(")") ;
  return sb.toString();
 }
 
 
 
 public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException{
  
  Map map = new HashMap();
  map.put("id", "1234567");
  map.put("name", "kelongmaode");
  map.put("clazz", "1101");
  
  map.put("myshort", "1101");
  map.put("mylong", "1101");
  map.put("mydouble", "1101");
  map.put("myfloat", "1101");
  map.put("myboolean", "true");
  map.put("mychar", "a");
  map.put("mybyte", "1");
  
  student student = new student();  
  copyMapToClass(student, map);
  
  String str = toString(student);
     System.out.println(str);    
 }
}

 

 

package cn.com.css.zero;

public class student {
 
 
 private String name;
 private int id;
 private String clazz;
 private boolean myboolean;
 private float myfloat;
 private double mydouble;
 private short myshort;
 private long mylong;
 private char mychar;
 private byte mybyte;
 
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getClazz() {
  return clazz;
 }
 public void setClazz(String clazz) {
  this.clazz = clazz;
 }
 
 public boolean isMyboolean() {
  return myboolean;
 }
 public void setMyboolean(boolean myboolean) {
  this.myboolean = myboolean;
 }
 public float getMyfloat() {
  return myfloat;
 }
 public void setMyfloat(float myfloat) {
  this.myfloat = myfloat;
 }
 public double getMydouble() {
  return mydouble;
 }
 public void setMydouble(double mydouble) {
  this.mydouble = mydouble;
 }
 public short getMyshort() {
  return myshort;
 }
 public void setMyshort(short myshort) {
  this.myshort = myshort;
 }
 public long getMylong() {
  return mylong;
 }
 public void setMylong(long mylong) {
  this.mylong = mylong;
 }
 
 public char getMychar() {
  return mychar;
 }
 public void setMychar(char mychar) {
  this.mychar = mychar;
 }
 public byte getMybyte() {
  return mybyte;
 }
 public void setMybyte(byte mybyte) {
  this.mybyte = mybyte;
 }
 
 
 

}