依据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;
}
}