包装泛型数组的基元时未经检查的强制转换警告

时间:2017-10-24 20:48:09

标签: java generics wrapper primitive

我正在编写一个小型的排序函数包,它们可以处理类SortableArray<T extends Comparable<T>>的对象,因为我希望能够对像int之类的原始对象进行排序,我需要将基元包装在一个class对象,在本例中具体为Integer。所以,我重载了我的构造函数以获取类型为int的数组,将每个数据包装在Integer中,将其存储在数组temp中,然后将GenList指向{ {1}}。我添加了一个temp的强制转换,以使IDE高兴,但现在我有一个未经检查的类型警告。

这是我的代码:

(T[])

我应该压制警告,还是采用更安全的方法?

感谢您的回复。

1 个答案:

答案 0 :(得分:4)

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

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