class Component {

  public static <T> Component.Builder<T> builder(Class<T> anInterface) {
    return new Builder<>(anInterface);
  }

  private  Component(
      Set<Class<? super T>> providedInterfaces,
      Set<Dependency> dependencies,
      @Instantiation int instantiation,
      @ComponentType int type,
      ComponentFactory<T> factory,
      Set<Class<?>> publishedEvents);

}