为通用数组包装原语时出现未经检查的强制转换警告

Unchecked cast warning when wrapping primitives for generic array

我正在编写一个小的排序函数包,用于 class SortableArray<T extends Comparable<T>> 的对象,因为我希望能够对像 int 这样的原始对象进行排序,我需要将基元包装在 class 对象中,在本例中具体为 Integer。因此,我重载了我的构造函数以获取类型 int 的数组,将每个数组包装在 Integer 中,将其存储在数组 temp 中,然后将 GenList 指向 temp。我添加了一个 (T[]) 的转换以使 IDE 快乐,但现在我有一个未经检查的类型警告。

这是我的代码:

 package sorts;

public class SortableArray<T extends Comparable<T>> {
    T[] GenList;


    public SortableArray(T[] theList) {
        GenList = theList;
    }

    public SortableArray(int[] theList) {
        Integer[] temp = new Integer[theList.length];   
        for(int i = 0; i < theList.length; i++) {
            temp[i] = new Integer(theList[i]);
        }
        GenList = (T[]) temp; //warning here
    }
}

我应该只抑制警告,还是有更安全的方法?

感谢您的回复。

这可能有问题的原因是如果我尝试做这样的事情:

SortableArray<String> array = new SortableArray<>(new int[] { 3, 9, 9 });

它看起来很荒谬,但它是完全合法的,当你想在其他地方使用它时会咬你。

您可能想要考虑的是静态工厂方法,它可能看起来像这样:

public static SortableArray<Integer> createSortableArrayFromInts(int[] theList)
{
    Integer[] temp = new Integer[theList.length];   
    for(int i = 0; i < theList.length; i++) {
        temp[i] = Integer.valueOf(theList[i]);
    }
    return new SortableArray<Integer>(temp);
}