【问题标题】:cast a List to a Collection将列表转换为集合
【发布时间】:2011-01-29 10:09:01
【问题描述】:

我有一些铅。我想在 java 中将 List 转换为 Collection

Collection<T> collection = new Collection<T>(mylList); 

但我有这个错误

无法实例化类型集合

【问题讨论】:

  • 我建议你读一本关于java基础的书。集合是一个接口,而不是一个类。了解两者的不同目标很重要。
  • @extraneon +1 正要提出同样的建议。在没有正确理解基础知识的情况下使用集合不是一个好主意。

标签: java list collections


【解决方案1】:

List&lt;T&gt; 已经实现了 Collection&lt;T&gt; - 为什么需要创建一个新的?

Collection<T> collection = myList;

错误信息是绝对正确的——你不能直接实例化一个接口。如果你想创建一个现有列表的副本,你可以使用类似的东西:

Collection<T> collection = new ArrayList<T>(myList);

【讨论】:

  • 当我做 Collection collection = new ArrayList(myList);在我将我的列表放入我的对象之后 obj.setMyCollection(collection);或者在我的 obj 中,集合是定义 Collection 而不是 ArrayList 所以当我想查看结果时我有一个错误
  • @Mercer 您调用的方法的签名是什么? List 应该在 setMyCollection(Collection collection) 上工作,但如果它是例如setMyCollection(Map collection) :) 如果是 setMyCollection(List collection) 那么你应该在声明为 List 的地方放一些东西: List collection = new ArrayList(); (删除泛型以缩短它)
【解决方案2】:

铸造永远不需要new

Collection<T> collection = myList;

你甚至没有明确地进行转换,因为CollectionList 的超类型,所以它会像这样工作。

【讨论】:

  • 当我这样做时,我有一个错误 Type mismatch: Can not convert List in Collection
  • @Mercer:你说的是java.util.List吗?您能否给我们一些背景信息(例如,&lt;T&gt; 是如何定义的)?
  • @Mercer:那么请提供一个简短但完整的示例。
  • 我这样做 Collections.sort(new ArrayList(product.getClient()));但在我的 obj 产品中,我有这个 public void setClient(Collection produitEvolution) { this.client= client; } public Collection getClient() { 返回客户端; }
【解决方案3】:

将列表转换为集合有多种解决方案

解决方案 1

List<Contact> CONTACTS = new ArrayList<String>();
// fill CONTACTS
Collection<Contact> c = CONTACTS;

解决方案 2

private static final Collection<String> c = new ArrayList<String>(
                                                Arrays.asList("a", "b", "c"));

解决方案 3

private static final Collection<Contact> = new ArrayList<Contact>(
                       Arrays.asList(new Contact("text1", "name1")
                                     new Contact("text2", "name2")));

解决方案 4

List<? extends Contact> col = new ArrayList<Contact>(CONTACTS);

【讨论】:

    【解决方案4】:

    不知道你的代码,回答你的问题有点困难,但根据这里的所有信息,我相信问题是你试图使用 Collections.sort 传递一个定义为 Collection 的对象,而 sort 没有不支持。

    第一个问题。为什么客户端定义如此笼统?为什么不是 List、Map、Set 或更具体的东西?

    如果客户端被定义为 List、Map 或 Set,则不会出现此问题,因为您可以直接使用 Collections.sort(client)。

    HTH

    【讨论】:

      【解决方案5】:

      第一个集合是类接口,你不能实例化。 Collection API

      ListVer APi也是一个接口类。

      可能是这样

      List list = Collections.synchronizedList(new ArrayList(...)); 
      

      版本enter link description here

      Collection collection= Collections.synchronizedList(new ArrayList(...)); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-16
        • 2017-02-06
        • 2022-11-12
        • 2011-08-02
        • 2010-10-09
        • 2011-01-29
        • 2019-05-07
        相关资源
        最近更新 更多