summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/examples/PrintableObject.java
blob: 63e8a5ce2593cc2974384416693f4fbc5d2581ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* PrintableObject.java */

import java.lang.reflect.*;

public class PrintableObject
{
  public String toString()
  {
    StringBuffer sb = new StringBuffer(200);
    Class clazz = getClass();
    while (clazz != null) {
      Field[] fields = clazz.getDeclaredFields();
      for (int i = 0; i < fields.length; ++i) {
        sb.append(fields[i].getName() + " = ");
        try {
          Object obj = fields[i].get(this);
          if (obj.getClass().isArray()) {
            Object[] ar = (Object[])obj;
            for (int j = 0; j < ar.length; ++j) {
              sb.append(ar[j].toString() + " ");
            }
            sb.append("\n");
          } else {
            sb.append(obj.toString() + "\n");
          }
        } catch (IllegalAccessException e) {
          sb.append(e.toString() + "\n");
        }
      }
      clazz = clazz.getSuperclass();
    }
    return sb.toString();
  }

  public static void main(String[] args)
  {
    JavaProgrammer jim = new JavaProgrammer();
    jim.name           = "Jim Miller";
    jim.department     = "Operating Systems";
    jim.age            = 32;
    String[] langs     = {"C", "Pascal", "PERL", "Java"};
    jim.languages      = langs;
    jim.linesofcode    = 55000;
    jim.jdk12          = true;
    jim.swing          = false;
    System.out.println(jim);
  }
}

class Employee
extends PrintableObject
{
  public String name;
  public String department;
  public int    age;
}

class Programmer
extends Employee
{
  public String[] languages;
  public int      linesofcode;
}

class JavaProgrammer
extends Programmer
{
  public boolean jdk12;
  public boolean swing;
}