如何转换Set <class <?>&gt;列表?

时间:2017-11-04 19:12:32

标签: java list set

我正在调用一种方法N次:

 Set<Class<?>> userManagementEntities = new Reflections("com.domain.api.userManagement.domain").getTypesAnnotatedWith(Entity.class);

返回Set<Class<?>>

我有一个二传手exposeIdsFor(Class<?>... domainTypes)

如何转换Set<Class<?>>以便函数exposeIdsFor不会抛出编译错误?

3 个答案:

答案 0 :(得分:3)

您正在创建一个列表列表。

你也不需要将ArrayList复制到ArrayList中,你只是复制一个列表;更不用说它必须是array

只需将ArrayListaddAll放在一起。

List<Class<?>> list = new ArrayList<>();
list.addAll(new Reflections("com.domain.api.userManagement.domain").getTypesAnnotatedWith(Entity.class));
// ...

Class<?>[] array = list.toArray(new Class<?>[0]);
config.exposeIdsFor(array);

答案 1 :(得分:1)

看起来您希望每个Set<Class<?>>只包含一个对象。如果是这种情况,请添加一个帮助方法从集合中选择项目,如下所示:

static Class<?> getAnnotatedClass(String name, Class<?> annotated) {
    Set<Class<?>> res = new Reflections(name).getTypesAnnotatedWith(annotated);
    if (res.size() != 1) {
        throw new IllegalStateException("Missing "+name);
    }
    return res.iterator().next();
}

答案 2 :(得分:1)

方法exposeIdsFor(Class<?>... domainTypes)需要一组Class个对象。您可以使用Set<Class<?>>方法将toArray转换为数组。

exposeIdsFor(userManagementEntities.toArray(new Class[userManagementEntities.size()]));