簡単な入れ子構造を扱う #13

Studentは同じであり、Groupもほとんど変わり映えしない。残念。

school/Student.java (reproduction)
package school;

public class Student {
    private String name;
    private int height;

    Student(String name, int height) {
        if (name == null) throw new IllegalArgumentException("null name");
        if (height <= 0) throw new IllegalArgumentException("height(" + height + ") <= 0");
        this.name = name;
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public int getHeight() {
        return height;
    }
}
school/Group.java
package school;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class Group implements Iterable<Student>, Named {
    private Named named;
    private ArrayList<Student> students = new ArrayList<Student>();

    Group(String name) {
        if (name == null) throw new IllegalArgumentException("null name");
        named = new NamedSupport(name);
    }

    public String getName() {
        return named.getName();
    }

    public Student add(String name, int height) {
        Student s = new Student(name, height);
        students.add(s);
        return s;
    }

    public Group add_(String name, int height) {
        add(name, height);
        return this;
    }

    public Iterator<Student> iterator() {
        return Collections.unmodifiableList(students).iterator();
    }
}