Java扩展-泛型处理问题
大约 1 分钟
1. java接收不同的类对象(包含实体类)的公共方法
示例1:
public class BlankNumUtils {
// <U>和Class<U> clazz用来接收实体类(或者其他类)对象的反射 new Users().class,
//U cla 用来接收实体类对象(或者其他类)new Users()
public static <U> void usersBlankNum(Class<U> clazz, U cla) {
//将传过来的对象进行赋值处理,
//此时u可用来代表传过来的对象(本示意中是Users),
//此时可以用u调用传过来对象的方法
U u = clazz.cast(cla);
//以下是验证此示意中实体类可被操作了
//getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
//.getClass()是一个对象实例的方法,只有对象实例才有这个方法,具体的类是没有的
for (Field field : u.getClass().getDeclaredFields()) {
//允许获取实体类private的参数信息 field.setAccessible(true);
field.setAccessible(true);
try {
System.out.println(field.getName()+":::"+String.valueOf(field.get(u)));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
示例2:
public <T> void setEffortScoringCriteriaInfo(Map buOrderWorkUserMap, Class<T> clazz, T cla) {
try {
T u = clazz.cast(cla);
for (Field field : u.getClass().getDeclaredFields()) {
field.setAccessible(true);
if ("workIterm".equals(field.getName())) {
buOrderWorkUserMap.put("workIterm", field.get(u));
}
if ("description".equals(field.getName())) {
buOrderWorkUserMap.put("workDescription", field.get(u));
}
if ("score".equals(field.getName())) {
buOrderWorkUserMap.put("workItemScore", field.get(u));
}
if ("number".equals(field.getName())) {
buOrderWorkUserMap.put("workNumber", field.get(u));
}
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
参考: