之前的一个需求是需要将查询出来的对象,只保留特定值,其余值都设置为null。
最直接的办法是把对象中的属性捞出来,手动设置null;可是对象每增加一个值可能都需要修改一下,很不便利。
我们可以把利用反射的原理来处理:
public void changeToNull(Object o) {
Class c = o.getClass();
Class sc = c.getSuperclass();
if (null != sc) {
recursionNull(sc, o);
}
try {
Field[] fs = c.getDeclaredFields();
for (Field f : fs) {
if (ZkUtils.isNotEquals(f.getName(), "carVin") &&
ZkUtils.isNotEquals(f.getName(), "serialVersionUID")) {
f.setAccessible(true);
f.set(o, null);
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public Object recursionNull(Class sc, Object o) {
Class c = sc.getSuperclass();
if (null != c) {
recursionNull(c, o);
}
try {
Field[] fs = sc.getDeclaredFields();
for (Field f : fs) {
if (ZkUtils.isNotEquals(f.getName(), "id") &&
ZkUtils.isNotEquals(f.getName(), "serialVersionUID")) {
f.setAccessible(true);
f.set(o, null);
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
这样处理,我们只保留了id和carVin的值。