class LazyInstanceSelector extends InstanceSelector<T> {

    @Override
    T select( IndexSlot slot )
    {
        return instances.computeIfAbsent( slot, s ->
        {
            assertOpen();
            return factory.apply( s );
        } );
    }

      LazyInstanceSelector( Function<IndexSlot,T> factory );
      LazyInstanceSelector( EnumMap<IndexSlot,T> map, Function<IndexSlot,T> factory );

}