@SuppressWarnings("unchecked") ModelManager(ImmutableSet<? extends Model<?>> ms) { models = (ImmutableSet<Model<?>>) ms; final ImmutableSetMultimap.Builder<Class<?>, Model<?>> builder = ImmutableSetMultimap .builder(); builder.put(ModelReceiver.class, new ModelReceiverModel(this)); final Set<UserInterface> uis = new LinkedHashSet<>(); for (final Model<?> m : models) { final Class<?> suptype = m.getSupportedType(); checkNotNull(suptype, "Model.getSupportedType() must return a non-null, model: %s.", m); builder.put(suptype, m); if (m instanceof UserInterface) { uis.add((UserInterface) m); } } checkState(uis.size() <= 1, "At most one implementor of %s can be defined, found %s.", UserInterface.class, uis); if (uis.isEmpty()) { userInterface = Optional.absent(); } else { userInterface = Optional.of(uis.iterator().next()); } registry = builder.build(); for (final Model<?> m : models) { doRegister(m); } }