2 votes

Opérations non vérifiées ou non sûres devoirs à la maison

Dans mon dernier cours, nous avons travaillé avec des génériques et j'ai reçu cet avertissement :

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

D'après ce que j'ai compris, cela résulte du fait que je n'ai pas spécifié le type d'objets dans ma collection. Je travaille actuellement avec des int à des fins de test, mais le programme est censé permettre le tri de n'importe quel type d'objet. Je ne pense pas vouloir spécifier mes collections en tant qu'int's, et ma collection est actuellement de type T pour cette raison. Mais mes instructions indiquent explicitement que mon programme ne doit pas générer d'avertissements. Voici l'une de mes méthodes :

Ce que j'ai maintenant :

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

Ce que je reçois :

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

2voto

zibi Points 1129

Pour se débarrasser de l'avis, il convient d'utiliser

Collection.toArray(T[] a)

au lieu de

Collection.toArray() 

Collection.toArray() renvoie un tableau d'objets, vous devrez donc toujours effectuer une conversion.

De plus, l'appel à toArray est coûteux, car un nouveau tableau doit être créé, c'est pourquoi vous devriez envisager de le stocker dans une variable et de le réutiliser.

Malheureusement, il n'est pas possible de créer un tableau de type générique, c'est pourquoi je pense que vous devriez supprimer toArray et utiliser un itérateur sur la collection, par exemple :

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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X