javalang List.of()关于cdi实例

时间:2016-12-22 06:36:54

标签: java cdi vavr

我有多个类,我创建了一个限定符:

  @ServiceComponent(restPath = "/trucks")
  public class TruckService {
  }

  @ServiceComponent(restPath = "/cars")
  public class CarService {
  }

这是限定符(对问题不重要)

    @Qualifier
    @Retention(RetentionPolicy.RUNTIME)
    @Target({TYPE, FIELD})
    public @interface ServiceComponent {

        public boolean exposeAsRest() default true;

        @Nonbinding public String restPath() default "";

        @Nonbinding public String restGetPrefix() default "get,find,all";

        @Nonbinding public String restPostPrefix() default "create,new,post";
    }

在另一个类中,我使用javax.enterprise.inject.Instance<>

注入这些实例
    class SomeConfigurationClasss {

        @Inject
        @ServiceComponent()
        Instance<Object> _restComponents;

         @Override
          public void iterate() throws Exception {

              //iterate
              for(Object obj : _restComponents){
                  somefuncion(obj);

              }

              //List.of(_restComponents)
                //.flatMap(obj -> somefuncion(obj));

          }

      }

如果我执行“正常”迭代(for ...),我将给出作为参数的Object(TruckService或CarService)给somefunction()。

但如果我使用javaslang's List.of(...),我会获得实例本身。我认为这是预期的行为

是否有可能在可包含一个或多个bean的实例上使用List.of(取决于注入绑定)。 (我已经尝试在实例上调用iterator(),select())

1 个答案:

答案 0 :(得分:1)

Instance<T> extends Iterable<T>所以你应该使用List#ofAll(Iterable)