Advertisement
Guest User

ObjectAnalyzer

a guest
Mar 20th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.94 KB | None | 0 0
  1. package objectAnalyzer;
  2. import java.util.ArrayList;
  3. /**
  4. * This program uses reflection to spy on objects.
  5. * @version 1.12 2012-01-26
  6. * @author Cay Horstmann
  7. */
  8. public class ObjectAnalyzerTest
  9. {
  10. public static void main(String[] args)
  11. {
  12. ArrayList<Integer> squares = new ArrayList<>();
  13. for (int i = 1; i <= 5; i++)
  14. squares.add(i * i);
  15. System.out.println(new ObjectAnalyzer().toString(squares));
  16. }
  17. }
  18.  
  19. package objectAnalyzer;
  20. import java.lang.reflect.AccessibleObject;
  21. import java.lang.reflect.Array;
  22. import java.lang.reflect.Field;
  23. import java.lang.reflect.Modifier;
  24. import java.util.ArrayList;
  25. public class ObjectAnalyzer
  26. {
  27. private ArrayList<Object> visited = new ArrayList<>();
  28. /**
  29. * Converts an object to a string representation that lists all fields.
  30. * @param obj an object
  31. * @return a string with the object's class name and all field names and
  32. * values
  33. */
  34. public String toString(Object obj)
  35. {
  36. if (obj == null) return "null";
  37. if (visited.contains(obj)) return "...";
  38. visited.add(obj);
  39. Class cl = obj.getClass();
  40. if (cl == String.class) return (String) obj;
  41. if (cl.isArray())
  42. {
  43. String r = cl.getComponentType() + "[]{";
  44. for (int i = 0; i < Array.getLength(obj); i++)
  45. {
  46. if (i > 0) r += ",";
  47. Object val = Array.get(obj, i);
  48. if (cl.getComponentType().isPrimitive()) r += val;
  49. else r += toString(val);
  50. }
  51. return r + "}";
  52. }
  53. String r = cl.getName();
  54. // inspect the fields of this class and all superclasses
  55. do
  56. {
  57. r += "[";
  58. Field[] fields = cl.getDeclaredFields();
  59. AccessibleObject.setAccessible(fields, true);
  60. // get the names and values of all fields
  61. for (Field f : fields)
  62. {
  63. if (!Modifier.isStatic(f.getModifiers()))
  64. {
  65. if (!r.endsWith("[")) r += ",";
  66. r += f.getName() + "=";
  67. try
  68. {
  69. Class t = f.getType();
  70. Object val = f.get(obj);
  71. if (t.isPrimitive()) r += val;
  72. else r += toString(val);
  73. }
  74. catch (Exception e)
  75. {
  76. e.printStackTrace();
  77. }
  78. }
  79. }
  80. r += "]";
  81. cl = cl.getSuperclass();
  82. }
  83. while (cl != null);
  84. return r;
  85. }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement