属性为Java基本数据类型的实体初始化(primitive code)

这段代码展示了如何使用反射机制初始化具有Java基本数据类型属性的实体对象,包括设置各种数值类型、字符串、字符和日期等。

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.*;
import com.alibaba.fastjson.JSON;
/**
 * 适用实体类中的属性类型为Java的数据类型
 * @author tgy
 *
 * @param <T>
 */
public class TestGenerate<T>{
    
    static final String   byte_str="byte";
    static final String   BYTE_STR="BYTE";
    static final String   short_str="short";
    static final String   SHORT_STR="SHORT";
    static final String   integer_str="int";
    static final String   INTEGER_STR="INTEGER";
    static final String   long_str="long";
    static final String   LONG_STR="LONG";
    static final String   float_str="float";
    static final String   FLOAT_STR="FLOAT";
    static final String   double_str="double";
    static final String   DOUBLE_STR="DOUBLE";
    static final String   char_str="char";
    static final String   CHARACTER_STR="CHARACTER";
    static final String   STRING_STR="STRING";
    static final String   boolean_str="boolean";
    static final String   BOOLEAN_STR="BOOLEAN";
    static final String   DATE_STR="DATE";
    static final String   BIGDECIMAL_STR="BIGDECIMAL";

    public static void main(String[] args) throws Exception{
        Person p=new Person();
        TestGenerate<Person>tg=new TestGenerate<Person>();
//        tg.geData1( p);
        List<Person>list=tg.geData2(p);
        System.out.println(JSON.toJSON( list));
    }
    public T geData1(T obj) throws Exception{
        if(obj==null) {
            return null;
        }else {
            Class<? extends Object> clazz = obj.getClass();
            Field[]fields=clazz.getDeclaredFields();
            for(int i=0;i<fields.length;i++) {
                Field field=fields[i];
                field.setAccessible(true);
                String name=field.getName();
                Class<?> type=field.getType();
                System.out.println("======>>field Name:"+name);
                Method m=null;
                try {
                    m=clazz.getMethod("set"+upperCase(name),type);
                }catch(Exception e) {
                    //TODO can print e,here we do nothing
                }
                if(m!=null) {
                String packageType = getPackageType(type);
                switch(packageType) {
                  case BYTE_STR:
                      m.invoke(obj, (byte)1);
                      break;
                  case SHORT_STR:
                      m.invoke(obj,(short)2);
                      break;
                  case INTEGER_STR:
                      m.invoke(obj, 3);
                      break;
                  case LONG_STR:
                      m.invoke(obj, 4L);
                      break;
                  case FLOAT_STR:
                      m.invoke(obj, 1.1f);
                      break;
                  case DOUBLE_STR:
                      m.invoke(obj, 2.02d);
                      break;
                  case CHARACTER_STR:
                      m.invoke(obj, 'A');
                      break;
                  case STRING_STR:
                      m.invoke(obj, "Hello World!");
                      break;                      
                  case BOOLEAN_STR:
                      m.invoke(obj, true);
                      break;
                  case DATE_STR:
                      m.invoke(obj, new Date());
                      break;
                  case BIGDECIMAL_STR:
                      m.invoke(obj, new BigDecimal(3.14));
                      break;                      
                  default:
                      break;
                }
                }
            }
            return obj;
        }
    }
    public List<T>geData2(T obj) throws Exception{
        List<T>list=new ArrayList<>();
        list.add(geData1(obj));
        return list;
    }
    public static String getPackageType(Object clazz) throws Exception{
        if(byte_str.equals(clazz.toString())||clazz==Byte.class) {
            return BYTE_STR;
        }else if(short_str.equals(clazz.toString()) ||clazz ==Short.class) {
            return SHORT_STR;
        }else if(integer_str.equals(clazz.toString()) || clazz == Integer.class) {
            return INTEGER_STR;
        }else if(long_str.equals(clazz.toString()) ||clazz == Long.class) {
            return LONG_STR;
        }else if(float_str.equals(clazz.toString()) ||clazz == Float.class) {
            return FLOAT_STR;
        }else if(double_str.equals(clazz.toString()) ||clazz == Double.class) {
            return DOUBLE_STR;
        }else if(char_str.equals(clazz.toString()) ||clazz == Character.class) {
            return CHARACTER_STR;
        }else if(clazz == String.class) {
            return STRING_STR;
        }
        else if(boolean_str.equals(clazz.toString()) ||clazz == Boolean.class) {
            return BOOLEAN_STR;
        }else if(clazz == Date.class) {
            return DATE_STR;
        }else if(clazz == BigDecimal.class) {
            return BIGDECIMAL_STR;
        }else {
            throw new Exception("Unsupported Class Type!");
        }
    }
    
    //首字母转大写,转小写就加32
    public static String upperCase(String str) {
        char[] ch = str.toCharArray();
        ch[0] = (char) (ch[0] - 32);
        return new String(ch);
    }
}
class Person{
    private int age;
    private Integer height;
    private String name;
    private char b;
    private int D;

    public int getD() {
        return D;
    }

    public void setD(int d) {
        D = d;
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Integer getHeight() {
        return height;
    }
    public void setHeight(Integer height) {
        this.height = height;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public char getB() {
        return b;
    }
    public void setB(char b) {
        this.b = b;
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值