【问题标题】:How to convert a Set<Class<?>> to a List?如何将 Set<Class<?>> 转换为 List?
【发布时间】:2017-11-04 19:12:32
【问题描述】:

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

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

它返回一个Set&lt;Class&lt;?&gt;&gt;

我有一个二传手exposeIdsFor(Class&lt;?&gt;... domainTypes)

如何转换我的Set&lt;Class&lt;?&gt;&gt;,使函数exposeIdsFor 不会引发编译错误?

【问题讨论】:

  • 您正在那里创建一个类列表。
  • 我很困惑。你的Set在哪里?

标签: java list set


【解决方案1】:

您正在那里创建一个类列表。

而且您也不需要将 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);

【讨论】:

  • @BigDong 想必你以前也遇到过这个问题吧?已更新。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    您似乎希望每个Set&lt;Class&lt;?&gt;&gt; 只包含一个对象。如果是这种情况,请添加一个辅助方法来从集合中选择项目,如下所示:

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多