Enum with getting subset
I suggest two changes to values(SubType):


Return a Set instead of a List.
Prepare all the possible results at class-loading time, so that values(SubType) could be accomplished by a simple lookup.  The code is slightly more complicated, but the runtime performance should be better.




private static final Map&lt;SubType, Set&lt;ContentType&gt;&gt; BY_SUBTYPE;
static {
    BY_SUBTYPE = new HashMap&lt;SubType, Set&lt;ContentType&gt;&gt;();
    for (SubType subType : SubType.values()) {
        BY_SUBTYPE.put(subType, new TreeSet&lt;ContentType&gt;());
    }
    for (ContentType type : ContentType.values()) {
        BY_SUBTYPE.get(type.getSubType()).add(type);
    }
    for (SubType subType : BY_SUBTYPE.keySet()) {
        // Make Set&lt;ContentType&gt; values immutable
        BY_SUBTYPE.put(subType, Collections.unmodifiableSet(BY_SUBTYPE.get(subType)));
    }
}

public static Set&lt;ContentType&gt; values(SubType subType) {
    // Returns an unmodifiable view of a SortedSet
    return BY_SUBTYPE.get(subType);
}