350 votes

Quelles sont les raisons pour lesquelles javac émet l'avertissement "utilise des opérations non contrôlées ou non sécurisées"

Par exemple:

    javac Foo.java
    Remarque: Foo.java utilise des opérations non contrôlées ou non sécurisées.
    Remarque: recompiler avec -Xlint: non cochée pour plus de détails.

447voto

Bill the Lizard Points 147311

Cela vient en Java 5 et, plus tard, si vous êtes à l'aide de collections sans spécificateurs de type (par exemple, Arraylist() au lieu de ArrayList<String>()). Cela signifie que le compilateur ne peut pas vérifier que vous êtes à l'aide de la collection dans un type de manière sûre, à l'aide de médicaments génériques.

Pour se débarrasser de l'avertissement, juste être précis sur ce type d'objets que vous voulez enregistrer dans la collection. Ainsi, au lieu de

List myList = new ArrayList();

utilisation

List<String> myList = new ArrayList<String>();

Dans Java 7, vous pouvez raccourcir générique instanciation en utilisant l'Inférence de Type.

List<String> myList = new ArrayList<>();

230voto

Dan Dyer Points 30082

Si vous faites ce qu'il suggère et recompiler avec le "-Xlint:décoché" de l'interrupteur, il vous donnera des informations plus détaillées.

Ainsi que l'utilisation de matières premières des types (tels que décrits par les autres réponses), un unchecked conversion peut aussi causer de l'avertissement.

Une fois que vous avez compilé avec-Xlint, vous devriez être en mesure de retravailler votre code afin d'éviter l'avertissement. Ce n'est pas toujours possible, en particulier si vous êtes à l'intégration avec l'héritage de code qui ne peut être changé. Dans cette situation, vous pouvez décider de supprimer l'avertissement dans des endroits où vous savez que le code est correct:

@SuppressWarnings("unchecked")
public void myMethod()
{
    //...
}

18voto

Suganthan Points 768

C'est une réponse tardive, même si je partage.

Cet avertissement signifie que votre code fonctionne sur un type brut, recompilez l'exemple avec -Xlint: décoché pour obtenir les détails

Référez-vous à cela pour plus

4voto

Matt Points 1447

Par exemple, lorsque vous appelez une fonction qui renvoie Generic Collections et que vous ne spécifiez pas les paramètres génériques vous-même.

pour une fonction

 List<String> getNames()


List names = obj.getNames();
 

va générer cette erreur.

Pour le résoudre, il suffit d'ajouter les paramètres

 List<String> names = obj.getNames();
 

4voto

Ryan Points 7035

L'avertissement "opérations non contrôlées ou non sécurisées" a été ajouté lorsque java a ajouté Generics , si je me souviens bien. Il vous demande généralement d'être plus explicite sur les types, d'une manière ou d'une autre.

Par exemple. le code ArrayList foo = new ArrayList(); déclenche cette exception car javac recherche ArrayList<String> foo = new ArrayList<String>();

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