【问题标题】:Converting generic list to generic array [duplicate]将通用列表转换为通用数组[重复]
【发布时间】:2013-05-15 20:01:23
【问题描述】:

如何将我的列表 items 转换为 CountedItem[]

import java.util.LinkedList;
import java.util.Collections;
import java.util.Comparator;

public class CountedSet<E>
{
    LinkedList<CountedItem<E>> items = new LinkedList<CountedItem<E>>();
    private final Comparator<CountedItem<E>> comparator = new Comparator<CountedItem<E>>()
    {
        @Override
        public int compare(final CountedItem<E> o1, final CountedItem<E> o2)
        {
            return Integer.valueOf(o1.getCount()).compareTo(Integer.valueOf(o2.getCount()));
        }
    };

    public CountedSet()
    {
    }

    public CountedItem<E> add(E item)
    {
        CountedItem<E> currentItem = null;
        for (CountedItem<E> listItem : items)
            if (listItem.getItem().equals(item))
            {
                currentItem = listItem;
                break;
            }

        if (currentItem != null)
            currentItem.increment();
        else
        {
            currentItem = new CountedItem<E>(item);
            items.add(currentItem);
        }

        return currentItem;
    }

    public CountedItem<E>[] getSortedArray()
    {
        Collections.sort(items, this.comparator);

        CountedItem<E>[] array = items.toArraySomeHow();
        return array;
    }
}

我没有太多细节要告诉你,除了我想在public CountedItem&lt;E&gt;[] getSortedArray()(最后一种方法)中执行此操作。此外,这样做会导致错误:

CountedItem<E>[] array = items.toArray(new CountedItem<E>[items.size()]);
     // ERROR - Cannot create a generic array of CountedItem<E>. ^

【问题讨论】:

  • java 不支持泛型数组
  • 没有办法解决这个问题吗?
  • 您可以使用items.toArray(new CountedItem[items.size()]); 发出警告
  • @hoaz +1。这行得通,而且是我见过的最简单的解决方案……但这合适吗?

标签: java arrays generics linked-list


【解决方案1】:

您可以使用items.toArray(new CountedItem[items.size()]); 发出警告。但是您的代码在此修改后不干净且类型不安全。

您也可以添加@SuppressWarnings("unchecked") 以消除警告。

你是否可以忍受它取决于你:)

【讨论】:

    【解决方案2】:

    我不相信你可以做泛型数组,但你可以做一个泛型 ArrayList。取决于你为什么想要一个可能有用的数组(速度超过链表?)。 ArrayList 在内部实现为Object[]。大概是这样的吧?

    public CountedItem<E>[] getSortedArray()
    {
        Collections.sort(items, this.comparator);
    
        return new ArrayList<E>(items);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多