1 /* 2 * A base-level class controlled by VerboseMetaobj. 3 */ 4 5 package sample.reflect; 6 7 import javassist.tools.reflect.Metalevel; 8 import javassist.tools.reflect.Metaobject; 9 10 public class Person { 11 public String name; 12 13 public static int birth = 3; 14 15 public static final String defaultName = "John"; 16 Person(String name, int birthYear)17 public Person(String name, int birthYear) { 18 if (name == null) 19 this.name = defaultName; 20 else 21 this.name = name; 22 23 birth = birthYear; 24 } 25 getName()26 public String getName() { 27 return name; 28 } 29 getAge(int year)30 public int getAge(int year) { 31 return year - birth; 32 } 33 main(String[] args)34 public static void main(String[] args) { 35 String name; 36 if (args.length > 0) 37 name = args[0]; 38 else 39 name = "Bill"; 40 41 Person p = new Person(name, 1960); 42 System.out.println("name: " + p.getName()); 43 System.out.println("object: " + p.toString()); 44 45 // change the metaobject of p. 46 if (p instanceof Metalevel) { 47 ((Metalevel)p)._setMetaobject(new Metaobject(p, null)); 48 System.out.println("<< the metaobject was changed.>>"); 49 } 50 51 System.out.println("age: " + p.getAge(1999)); 52 } 53 } 54