在java中,重要的就是对象吧,通常我们需要测试时,都需要对象.get()获得对象的属相值,这样操作的效率很低下啊。。。
现在奉上一个工具类,就可以解决这种问题。这里主要还是重写toString().
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
public class EntityUtil {
/**
* 返回代表当前对象的字符串对象,忽略ignores所指定的的属性
* @return包含所有的成员变量的名称和他们的值,以及从父类中继承的属性。不包含Objecy中的属性。
*/
public static String toString(Object entity,String[] ignores){
if(entity == null){
return null;
}
StringBuffer buffer = new StringBuffer();
Class c = entity.getClass();
buffer.append(c.getName());
buffer.append("[");
Class parent = c.getSuperclass();
while(parent != null && !(parent == Object.class)){
Field[] fields = parent.getDeclaredFields();
try{
appendFields(buffer,fields,entity,ignores);
}catch(Exception e){
e.printStackTrace();
}
parent = parent.getSuperclass();
}
try{
Field[] fields = c.getDeclaredFields();
appendFields(buffer,fields,entity,ignores);
}catch(Exception e){
e.printStackTrace();
}
buffer.append("]");
return buffer.toString();
}
/**
* 返回代表对象的字符串对象
* @param entity
* @return 包含所有的成员变量的名称和他们的值,以及从父类中继承的属性。不包含Objecy中的属性。
*/
public static String toString(Object entity){
return toString(entity,new String[0]);
}
private static void appendFields(StringBuffer buffer,Field[] fields,Object entity,
String[] ignores) throws Exception{
AccessibleObject.setAccessible(fields, true);
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
if(!shouldIgnore(name,ignores)){
if(i!=0){
buffer.append(",");
}
if(!name.equals("class")){
Object value = fields[i].get(entity);
buffer.append(name+"="+value);
}
}
}
}
private static boolean shouldIgnore(String field, String[] ignores) {
boolean ignore = false;
for (int i = 0; i < ignores.length; i++) {
if(field.equalsIgnoreCase(ignores[i])){
ignore = true;
break;
}
}
return false;
}
}