class ConfigManager {

    @SuppressWarnings({"unchecked"}) //Effectively checked on insert (see the Builder below)
    public <E extends Enum<E>> Config<E> getConfig(Class<E> clazz) {
        return (Config<E>) Preconditions.checkNotNull(config.get(clazz), "No config loaded for root: %s", clazz.getSimpleName());
    }

    private  ConfigManager(CLISetup commandLineArgs, ImmutableMap<Class<? extends Enum<?>>, Config<?>> config);

}