2

私の最近のクラスの割り当てでは、ジェネリックを扱っていましたが、次の警告を受け取りました。

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

私が理解していることから、これはコレクション内のオブジェクトのタイプを指定していないことが原因です。私は現在、テスト目的で int を使用していますが、プログラムは任意の型オブジェクトの並べ替えを許可するはずです。コレクションを int として指定したくないと思います。このため、コレクションは現在 T 型になっています。しかし、私の指示では、プログラムが警告を生成してはならないと明示的に述べています。これが私の方法の1つです:

私が今持っているもの:

     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()]);
4

1 に答える 1

2

通知を取り除くには、使用する必要があります

Collection.toArray(T[] a)

それ以外の

Collection.toArray() 

Collection.toArray() はオブジェクトの配列を返すため、常にキャストする必要があります。

また、新しい配列を作成する必要があるため、 toArray の呼び出しはコストがかかるため、変数に格納して再利用することを検討する必要があります。

残念ながら、ジェネリック型の配列を作成することはできません。したがって、toArray を削除して、コレクションに対して iterator を使用する必要があると思います。次に例を示します。

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;
于 2013-02-01T23:44:25.187 に答える