首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-11-10 
根据Map 动态生成一个类动态打印import java.lang.reflect.Fieldimport java.lang.reflect.InvocationTar

根据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;
?}
?
?
?

}

热点排行