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

SchoolとGradeはSetContainerの拡張で済む。

school/School.java
package school;

import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;

public class School extends SetContainer<Grade> {
    public Grade add(String name) {
        Grade g = get(name);
        if (g == null) put(name, g = new Grade(name));
        return g;
    }
}
school/Grade.java
package school;

public class Grade extends SetContainer<Group> implements Named {
    private Named named;

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

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

    public Group add(String name) {
        Group g = get(name);
        if (g == null) put(name, g = new Group(name));
        return g;
    }
}

これらはSchoolUser4.javaを何ら変えることなく同じ結果を引き出せる。