未经检查或不安全的操作作业

时间:2013-02-01 23:37:54

标签: java unsafe operations unchecked

在我最近的课堂作业中,我们一直在使用泛型,我一直收到这个警告:

Note: Selector.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details. 

据我所知,这是因为没有指定我的集合中的对象类型。我目前正在使用int进行测试,但该程序应该允许对任何类型对象进行排序。我不认为我想将我的集合指定为int,因此我的集合目前是T类型。但我的指示明确声明我的程序不应生成任何警告。这是我的一种方法:

我现在拥有的:

     else {
        T[] a = new T[c.size()];
        c.toArray(T[] a);
        T min = a[0];
        for (int i = 0; i < a.size(); i++) {
           if (comp.compare(min, a[i]) > 0) {
              min = a[i];
           }
        }
        return min; 
     }

我得到了什么:

    Testing.java:48: error: generic array creation
            T[] a = c.toArray(new T[c.size()]);

1 个答案:

答案 0 :(得分:2)

要删除通知,请使用

Collection.toArray(T[] a)

而不是

Collection.toArray() 

Collection.toArray()返回一个Objects数组,因此你总是需要强制转换。

此外,调用toArray是昂贵的,因为必须创建新数组,因此您应该考虑将其存储到变量并重用。

不幸的是,无法创建泛型类型的数组,因此我认为您应该删除toArray并在集合上使用迭代器,例如:

Iterator<T> iterator = c.iterator();
T min = iterator.next(); //you already checked that there has to be first element
while (iterator.hasNext()) {
    T element = iterator.next();
    if (comp.compare(min, element) > 0) {
        min = element;
    }
}
return min;