这两个方法我用到了一个开源java工具类,还是比较好用的。具体地址为:Hutool有兴趣的可以看一下。
我主要用这个工具类(Hutool)做了一个日期转换,工具的当中的因为时间关系,没有写的太全,主要涉及一些常用的。
/*** 动态的给某个实体,某个属性赋值
* @param entity 实体的名字
* @param setName 所要赋值的属性的名称
* @param setValue 所要赋值的属性的值
* @param format 需要指定传入日期的格式
*/
@SuppressWarnings("unchecked")
public static <T> void setV(T entity,String setName,String setValue,String format) {
Class<T> clazz = (Class<T>) entity.getClass();
//获取所有的bean中所有的成员变量
Field[] fields = clazz.getDeclaredFields();
try {
for (int j = 0; j < fields.length; j++) { // 遍历所有属性
String name = fields[j].getName(); // 获取属性的名字
if(name.equals(setName)){
name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
String type = fields[j].getGenericType().toString(); // 获取属性的类型
if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
Method m = entity.getClass().getMethod("set"+name,String.class);
m.invoke(entity, setValue);
}
if (type.equals("class java.util.Date")) {
Method m = entity.getClass().getMethod("set"+name,Date.class);
Date date = DateUtil.parse(setValue,format);
m.invoke(entity, date);
}
if (type.equals("class java.lang.Integer")) {
Method m = entity.getClass().getMethod("set"+name,Integer.class);
m.invoke(entity, Integer.valueOf(setValue));
}
if (type.equals("class java.lang.Double")) {
Method m = entity.getClass().getMethod("set"+name,Double.class);
m.invoke(entity, Double.valueOf(setValue));
}
if (type.equals("class java.lang.Long")) {
Method m = entity.getClass().getMethod("set"+name,Long.class);
m.invoke(entity, Long.valueOf(setValue));
}
if (type.equals("class java.lang.Boolean")) {
Method m = entity.getClass().getMethod("set"+name,Boolean.class);
m.invoke(entity, Boolean.valueOf(setValue));
}
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
/*** 动态的获取某个属性的某个实体的值
* @param entity 实体的名字
* @param getName 要获取值的某个属性的名称
* @return 属性具体的值,当没有值得时候返回null
*/
@SuppressWarnings("unchecked")
public static <T> Object getV(T entity,String getName){
Class<T> clazz = (Class<T>) entity.getClass();
//获取所有的bean中所有的成员变量
Field[] fields = clazz.getDeclaredFields();
try {
for (int j = 0; j < fields.length; j++) { // 遍历所有属性
String name = fields[j].getName(); // 获取属性的名字
if(name.equals(getName)){
name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
String type = fields[j].getGenericType().toString(); // 获取属性的类型
if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
Method m = entity.getClass().getMethod("get" + name);
String value = (String) m.invoke(entity); // 调用getter方法获取属性值
return value;
}
if (type.equals("class java.util.Date")) {
Method m = entity.getClass().getMethod("get" + name);
Date value = (Date) m.invoke(entity);
Date val = DateUtil.parse(DateUtil.formatDate(value));
return val;
}
if (type.equals("class java.lang.Integer")) {
Method m = entity.getClass().getMethod("get" + name);
Integer value = (Integer) m.invoke(entity);
return value;
}
if (type.equals("class java.lang.Double")) {
Method m = entity.getClass().getMethod("get" + name);
Double value = (Double) m.invoke(entity);
return value;
}
if (type.equals("class java.lang.Long")) {
Method m = entity.getClass().getMethod("get" + name);
Long value = (Long) m.invoke(entity);
return value;
}
if (type.equals("class java.lang.Boolean")) {
Method m = entity.getClass().getMethod("get" + name);
Boolean value = (Boolean) m.invoke(entity);
return value;
}
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}