Probleme de compilation en java

Bonjour,
En programmant en java, j’utilise ArrayList, voici une partie de mon code
" ArrayList test = new ArrayList();
test.add(“bonjour”);"

Au debut du code j’ai mis la ligne suivante " import java.util.* "

Et lorsque je compile, mon terminal m’affiche ceci :
"Note: sources/Principal.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Il compile quand meme mais je ne comprends pas ces lignes…

Merci pour votre aide,

Je n’ai pas de réponse, mais tu t’es trompé de section pour poster: je bascule dans la section programmation.

Ok mattotop,
merci d’avoir déplacé le sujet!
En espérant que certains puissent répondre à mes questions…

cela semble provenir de l’utilisation de la classe ArrayList, et il y doit certainement y avoir quelque chose que je ne déclare pas correctement, et la doc sur le site de Sun ne répond pas à mes questions (enfin je n’ai pas trouvé :frowning:),

Le message t’avertis que la méthode add de la classe ArrayList peut lancer des exceptions et que ton code n’est pas prévu pour gérer ces dernières.

Essaye de faire :

try {
  list.add("toto");
} catch (Exception e) {
e.printStackTrace();
}

Salut thorgrim,

Alors je ne comprends pas très bien ton code (je débute encore en java mais bon faut bien passer par la…)

Qu’est ce que “try”???
Une méthode?
Et a quoi correspondent ces lignes???

} catch (Exception e) { e.printStackTrace(); }

Et qu’entends tu par “exceptions”?

Merci pour ton aide

as tu au moins fait une recherche sur try…catch, et et les exceptions en java avant de poser des questions ?

Les exception sont un mécanisme de gestion d’erreurs. Par exemple si tu as un tableau d’objets de 10 cases et que tu tentes d’insérer un objet à la 11ième case, ta méthode (ou fonction) d’insertion va lever une exception pour te dire “t’as voulu insérer un objet là où tu peux pas” et stopper ton programme. En gros, ce sont des messages d’erreur.

Le mécanisme de gestion des exception est d’encadrer les instructions en les exécutant dans un bloc try{…}catch(). Typiquement le but est de “tenter” (try) l’exécution du code et si celui-ci génère une exception (par exemple une insertion à un rang qui n’existe pas dans un tableau) la partie “catch” va attraper celle-ci et dans ce bloc tu peux réaliser les traitements que tu veux comme afficher un message d’erreur, quitter proprement ton application, faire suivre l’exception, ne rien faire…

Pour savoir si une méthode génère ou pas d’exception le mieux est de regarder dans l’API de Java. Si dans la description de la méthode tu vois une ligne du genre :

c’est que la méthode peut lever en cas d’erreur l’exception nommée (ici IndexOutOfBoundException).

Voila pour la partie présentation (ultra) rapide des exceptions. Je t’invite à aller te renseigner plus avant avec notre ami google comme le dit si bien mattotop.

Maintenant en relisant ton code je me rend compte que le message que tu as au moment de la compilation ne vient vraisemblablement pas de la partie de code que tu nous as indiqué. En effet, la méthode add que tu as utilisé ne génère aucune exception (dixit l’API). As-tu essayé de recompiler avec l’option ‘-Xlint:unchecked’ comme dit dans ton premier message ?

ce n’est pas “-Xlint:unchecked” je pense, mais plutôt juste “-Xlint”, il me semble pas que le premier soit accepté.
Edit : après tentative : c’est même l’exact contraire qui se passe : “unchecked” vire les warnings donc il ne faut pas le metre sinon on n’est pas plus avancé.

Concernant le message d’avertissement : ce n’est effectivement qu’un avertissement, m’enfin ca peut être la source de problèmes plus gros par la suite donc il vaut mieux y faire gaffe. Disons que si tu prends une NullPointerException dans les dents lors de l’execution, y’aura de fortes chances que ca puisse venir de la ^^.
Si, comme tu le dis, tu débutes en java, je ne vois pas bien pourquoi tu te prends la tête avec les ArrayLists, mais bon c’est les gouts et les couleurs ca ^^.

et sinon “printStackTrace()” est une méthode pour afficher des infos t’aidant à débugger, en te montrant dans ton code, ou l’erreur est survenue, depuis la méthode / manipulation qui pose problème (tout en haut) et en descendant jusqu’au programme que tu as lancé (tout en bas). Note que tu peux metre ce que tu veux dans le bloc “catch” pour répondre à une exception survenue dans le try. Ceci dit une façon prudente de coder serait d’éviter ce genre de blocs en produisant, en amont, du code qui ne peut pas “planter” (même si ce n’est peut être pas toujours évident).

M’enfin pour en revenir au sujet principal, je serais tenté de dire un peu comme matt (pour ce qui est des blocs try/catch : search the friendly web.
Concernant ta question initiale : c’est juste un avertissement ce que te dit le compilo mais je te conseille de l’écouter, regarde bien ce qui pourrait éventuellement poser problème, en essayant de faire abstraction de la “logique” de ton code, ca te permetra peut être de trouver pourquoi le compilo couine.

Merci beaucoup pour vos réponses!
En effet, vous avez raison, google est mon ami.
Je n’avait pas fait la recherche avant, désolé…, (depuis vos réponses c’est fait^^, par contre je trouve la documentation Java API un peu compliquée au début…je pense que c’est le temps de s’y faire et je ne pensais pas du tout qu’il existait une résolution d’erreur!!!)

Merci pour les explications,
alors l’un de mes problemes était que je ne précisais pas le type de mon objet dans ArrayList

ensuite le message “warning” s’affichait toujours, et j’ai enfin compris ce principe de gestion d’erreur.
Je testerai ça rapidement,
Encore merci a vous!

Pour un langage dit “de haut niveau” ca serait dommage tout de même :stuck_out_tongue:

Sinon concernant l’API : oui elle est illisible les premières fois, mais ensuite ca va mieux (perso je la trouve pas si mal par rapport à d’autres comme la doc Ocaml mais bon … question de goût).

personnellement je trouve que l’api java est surement une des meilleures, mais ça n’engage que moi…