如何实现从List <SomeParamType>到List <SomeParamType <?>>的转换

Mar*_*nik 8 java generics

在使用Spring ApplicationContext及其方法时,getBeansOfType我遇到了泛型类型的问题.这证明了这个问题:

class Test
{
  List<Generator<?>> allGenerators = 
      new ArrayList(getBeansOfType(Generator.class).values()); // Raw type warning 
                                                               // for new ArrayList()
  <T> Map<String, T> getBeansOfType(Class<T> klass) {
    return emptyMap();
  }
}

interface Generator<R> {}
Run Code Online (Sandbox Code Playgroud)

我从容器中检索参数化类型的所有bean.我希望将它们作为Generator<?>并使用自定义逻辑根据每个Generator实例上的属性安全地转换为适当的类型参数.

我的问题是,我找不到任何方式来分配allGenerators没有类型安全警告,即使在概念层面我不承诺任何未经检查的类型参数.我只想将原始类型转换为通配符类型.

是否有任何成语不需要@SuppressWarnings到达那里?

Raf*_*ele 3

实际上不是转换,而是一个在没有警告的情况下构建所需类型列表的程序:

public List<Generator<?>> solution() {
    List<Generator<?>> dst = new ArrayList<>();
    for (Generator<?> g : getBeansOfType(Generator.class).values()) {
        dst.add(g);
    }
    return dst;
}
Run Code Online (Sandbox Code Playgroud)