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

被折叠的 条评论
为什么被折叠?



