代码之家  ›  专栏  ›  技术社区  ›  Chris Phillips

包装泛型数组的基元时出现未选中的强制转换警告

  •  1
  • Chris Phillips  · 技术社区  · 7 年前

    我正在编写一个小的排序函数包,用于处理类的对象 SortableArray<T extends Comparable<T>> 因为我希望能够对基本对象进行排序,比如 int ,我需要将原语包装在类对象中,在这种情况下, Integer . 因此,我重载了构造函数以获取类型为的数组 整数 ,将每个包装成 整数 ,将其存储在数组中, temp ,然后指向 GenList . 我添加了一组 (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
        }
    }
    

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

    感谢您的回复。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Joe C    7 年前

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