/*
Person.java
Created on December 22, 2005, 9:00 PM
*/
import static java.lang.System.out; // 1) Static import
@Pojo ("person") // 2) Annotation (metadata)
public class Person {
Gender gender; // 3) Type-safe enumeration
String firstName;
String lastName; public Person(String firstName, String lastName, Gender gender) {
this.firstName = firstName;
this.lastName = lastName;
this.gender = gender;
assert(gender != Gender.NEUTRAL); // Assertion J2SE 1.4
}
public void join(Group<Person> g) {
g.add(this);
}
public static void main(String[] args) {
Person p = new Person("Faye", "Wong", Gender.FEMALE);
Group<Person> personGroup = new Group<Person>(); // 4) Generics
p.join(personGroup); // 5) Varargs
personGroup.printMemberInfo(p.firstName, p.lastName, p.gender.alias);
// Ermmm... don't think I want to expose my last name
personGroup.printMemberInfo(p.firstName, p.gender.alias);
if (p.getClass().isAnnotationPresent(Pojo.class)) {
out.println("Reference p is a POJO");
} Group<Integer> integerGroup = new Group<Integer>();
integerGroup.add(18); // 6) Auto-boxing
integerGroup.add(new Integer(8)); // Prior J2SE 5.0
}
}
// Enum Type
enum Gender {
MALE("M"), FEMALE("F"), NEUTRAL("N");
String alias;
Gender(String s) { alias = s; }
}
// Annotation Type
@Retention (RetentionPolicy.RUNTIME)
@Target (ElementType.TYPE)
@interface Pojo { String value() default "undefined"; }
// Generic Type
class Group<E> {
List<E> members = new ArrayList<E>();
public Group() {}
public void add(E e) { members.add(e); }
public E leave(int index) { return members.remove(index); }
public List<E>getMembers() { return members; }
public static void printMemberInfo(String... info) {
for (String s : info) { // 7) Enhanced for loop
out.println(s);
}
}
}