package ObjectAnalazer; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; public class ObjectAnalyzer { private ArrayList<Object> visited = new ArrayList<Object>(); /** * Converteaza obictul in String in care sunt enumerate toate cimpurile * @param obj Obiectul * @return String, in care va fi inticat numele obiectului si numele tutturor cimpurilor si valorile lor */ public String toString(Object obj) { if(obj == null) return null; if(visited.contains(obj)) return "..."; visited.add(obj); Class cl = obj.getClass(); if(cl == String.class) return (String)obj; if(cl.isArray()) { String r = cl.getComponentType() + "[]("; for(int i=0;i<Array.getLength(obj);i++) { if(i > 0) { r+=","; } Object val = Array.get(obj, i); if(cl.getComponentType().isPrimitive()) { r +=val; } else { r+=toString(val); } } return r+ "}"; } String r = cl.getName(); //Control de cimpuri in clasa si in SuperClase. do { r+="["; Field[] fields = cl.getDeclaredFields(); AccessibleObject.setAccessible(fields, true); //Gasirea numelor si valorilor cimpurilor. for(Field f : fields) { if(!Modifier.isStatic(f.getModifiers())) { if(!r.endsWith("[")) { r+=","; } r+=f.getName() + "="; try { Class t = f.getType(); Object val = f.get(obj); if(t.isPrimitive()) { r+= val; } else { r+= toString(val); } } catch (Exception e) { e.printStackTrace(); } } } r+="]"; cl = cl.getSuperclass(); }while(cl != null); return r; } }