@Override public <E, T extends Resource<E>> T create(final Class<T> type, final E underlyingResource) { T result = null; TreeMap<Class<?>, ResourceGenerator> generated = new TreeMap<>(new RelatedClassComparator()); for (ResourceGenerator generator : getGenerators()) { if (generator.handles(type, underlyingResource)) { Class resourceType = generator.getResourceType(this, type, underlyingResource); if (type.isAssignableFrom(resourceType)) { generated.put(resourceType, generator); } } if (generated.size() > 0) { result = (T) generated.lastEntry().getValue().getResource(this, type, underlyingResource); } } return result; }