Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

message d'eclipse que je ne pige pas

13 réponses
Avatar
une.bevueVOTEZ
à la ligne :
ArrayList<Soil> soils = (ArrayList<Soil>) value;
où value "entre" dans la méthode comme Object, j'ai le warning suivant :
Type safety : The cast from Object to ArrayList<Soil> is actually
checking against the erased type ArrayList.

je comprend + ou - bien ce message :

comme value est passé en tant qu'objet j'ai perdu le typage des objets
de cette ArrayList c'est ça ?

bon, mais, pour éviter ce warning je ne vois pas ce qu'il faut faire
pour l'éviter...

tester que value est bien une instanceOf ArrayList<Soil> ?

je ne vois pas ce que cela apporterait d'autant que je suis sür que
c'est le cas...
--
une bévue

10 réponses

1 2
Avatar
Olivier Thomann
à la ligne :
ArrayList<Soil> soils = (ArrayList<Soil>) value;
où value "entre" dans la méthode comme Object, j'ai le warning suivant :
Type safety : The cast from Object to ArrayList<Soil> is actually
checking against the erased type ArrayList.
En gros ça veut dire que tu peux mettre (ArrayList) sans que ça change

quoi que ce soit.
La question à se poser est pourquoi tu as value en tant qu'Object.
--
Olivier

Avatar
une.bevueVOTEZ
Olivier Thomann wrote:

La question à se poser est pourquoi tu as value en tant qu'Object.


OK, merci, mais bon, si effectivement je supprime <...> eclipse n'est
pas content ailleurs et, si je n'abuse, ça tourne en rond...
Je viens juste de vérifier ce point.
donc si j'enlève le <Soil> à droite )) eclipse me dit :
The expression of ArrayList needs unchecked conversion to conform to
ArrayList<Soil>...
ça m'amuse ;-)

pourquoi Object because c'est une méthode de
javax.swing.table.DefaultTableCellRenderer :
public Component getTableCellRendererComponent(JTable table, Object
value,
boolean isSelected, boolean hasFocus, int row, int column)
{...}

quand on extends une classe on ne peut pas changer le type des arguments
???

--
une bévue

Avatar
Vincent Cantin
pourquoi Object because c'est une méthode de
javax.swing.table.DefaultTableCellRenderer :


Rhaaa ... je suis tombe sur le meme style de probleme l'an dernier, et
j'avais envoyer un RFE a Sun pour leur faire remarquer que ca serait bien
qu'ils mettent les generiques dans leur JTree et JTable, ainsi que dans leur
modeles respective:

JTree<Node>
JTreeModel<Node>
etc ...

Moi quand j'implement un model pour ces structures, j'ai des warnings
d'unchecked conversions, de maniere similaire a ce que tu as eu. En fait, je
me souviens aussi avoir eu exactement le meme probleme que toi pour mes
renderers.

Ils faudrait leur repeter que ca serait plus logique d'ajouter des
generiques a cet endroit parce que pour l'instant ils ont fait la sourde
oreille a mon RFE.

Pour que les choses changent, allez voter pour ce RFE sur la page
http://bugs.sun.com/bugdatabase/view_bug.do?bug_ida79357

Avatar
Francis JUGE-BOIRARD
à la ligne :
ArrayList<Soil> soils = (ArrayList<Soil>) value;
où value "entre" dans la méthode comme Object, j'ai le warning suivant :
Type safety : The cast from Object to ArrayList<Soil> is actually
checking against the erased type ArrayList.

je comprend + ou - bien ce message :

comme value est passé en tant qu'objet j'ai perdu le typage des objets
de cette ArrayList c'est ça ?

bon, mais, pour éviter ce warning je ne vois pas ce qu'il faut faire
pour l'éviter...

tester que value est bien une instanceOf ArrayList<Soil> ?

je ne vois pas ce que cela apporterait d'autant que je suis sür que
c'est le cas...
Idem pour moi...

En fait, la seule solution que j'ai trouvé et de configuré Eclipse (ou plustot
le compilateur java) pour qu'il ne m'indique plus ce type de warning :
windows->preference->java->compiler->Error/Warning->J2SE 5.0 Options->Unchecked
generic type operation = Ignore

Ce qui revient en fait à utiliser l'option -nowarn de javac.....

Pas super propre mais bon.....

Avatar
une.bevueVOTEZ
Francis JUGE-BOIRARD wrote:

En fait, la seule solution que j'ai trouvé et de configuré Eclipse (ou
plustot le compilateur java) pour qu'il ne m'indique plus ce type de
warning : windows->preference->java->compiler->Error/Warning->J2SE 5.0
Options->Unchecked generic type operation = Ignore


OK, merci pour l'info ;-)
--
une bévue

Avatar
une.bevueVOTEZ
Vincent Cantin wrote:


Ils faudrait leur repeter que ca serait plus logique d'ajouter des
generiques a cet endroit parce que pour l'instant ils ont fait la sourde
oreille a mon RFE.



ouais il y a un autre truc que je ne pige pas, dans le même style, soit
:
ArrayList<Soil> soils = new ArrayList<Soil>();

public void maMethod(ArrayList<Soil> terrains) {
for ...
Soil terrain = (Soil) terrains.get(i);
-------------------------------^^^^^^^

pourquoi continue-t'on à devoir caster dans ce cas ???
puisqu'on est ceratain d'avoir un Soil.class ???

Pour que les choses changent, allez voter pour ce RFE sur la page
http://bugs.sun.com/bugdatabase/view_bug.do?bug_ida79357


j'y vais de ce click ;-)

--
une bévue

Avatar
Remi Koutcherawy
Vous devriez quand même prendre le temps de lire le tutoriel,
http://java.sun.com/docs/books/tutorial/extra/generics/index.html
il est bien écrit, et permet de comprendre pas mal de choses...

ArrayList<Soil> soils = (ArrayList<Soil>) value;
où value "entre" dans la méthode comme Object.


Ne connaissant pas le type de value, le pb peut être :

- soit value est déclaré: Object value;
Le Pb est qu'une ArrayList de Soil est "plus" qu'un Object, voir :
http://java.sun.com/docs/books/tutorial/extra/generics/subtype.html
En gros, soils est défini comme une collection de Soil,
ce qu'on en récupère ne peut être que des Soil, et n'a pas besoin de cast sur un get().
Mais si value est une Collection d'Object: ArrayList<Object> value; par exemple
dans laquelle on peut trouver un Integer, alors caster value en soils,
ne permet plus de garantir que soils ne contiendra que des Soil.
D'où le warning si on caste la Collection.

- soit value est déclaré: ArrayList value; dans le style java 1.4 sans générique.
Une collection sans type paramètre est une Collection "raw type"
qui correspond non pas à une liste d'Object,
mais à une liste de machins de types inconnus: ArrayList<?> value
Enfin, pas tout à fait car
Collection a;
Collection<String> b = a; // donne un warning
Collection<?> c;
Collection<String> d = c; // donne une erreur
voir http://java.sun.com/docs/books/tutorial/extra/generics/legacy.html

Quand au cast, il n'est pas nécessaire...
public void maMethod(ArrayList<String> terrains) {
Soil terrain = (String) terrains.get(0);
Ne donne pas de warning...

Je suppose que la méthode n'est pas exactement "maMethode..."
On peut penser à :
maMethod(ArrayList<? extends Soil> terrains) {
ou
maMethod(ArrayList<? super Soil> terrains) {
pour éviter le cast.

Vincent Cantin wrote:


Ils faudrait leur repeter que ca serait plus logique d'ajouter des
generiques a cet endroit parce que pour l'instant ils ont fait la sourde
oreille a mon RFE.




ouais il y a un autre truc que je ne pige pas, dans le même style, soit
:
ArrayList<Soil> soils = new ArrayList<Soil>();

public void maMethod(ArrayList<Soil> terrains) {
for ...
Soil terrain = (Soil) terrains.get(i);
-------------------------------^^^^^^^

pourquoi continue-t'on à devoir caster dans ce cas ???
puisqu'on est ceratain d'avoir un Soil.class ???


Pour que les choses changent, allez voter pour ce RFE sur la page
http://bugs.sun.com/bugdatabase/view_bug.do?bug_ida79357



j'y vais de ce click ;-)




Avatar
pere.noel
Remi Koutcherawy wrote:

Vous devriez quand même prendre le temps de lire le tutoriel,
http://java.sun.com/docs/books/tutorial/extra/generics/index.html il est
bien écrit, et permet de comprendre pas mal de choses...


OUI, très bonne idée ;-) je fais TROP confiance à mon intuition...


dans mon cas tous mes soils sont construits comme ArrayList<Soil>, c'est
peut-être (encore?) un pb spécifique à eclipse...

bien sûr quand c'est passé comme Object... (dans un TableModel par ex)
--
une bévue

Avatar
Vincent Cantin
Pour que les choses changent, allez voter pour ce RFE sur la page
http://bugs.sun.com/bugdatabase/view_bug.do?bug_ida79357


j'y vais de ce click ;-)


Lol ... je viens d'aller voir le lien, et il n'y a que 2 votes.

Je me demande ce que Sun va faire de ce RFE ... et j'en viens a me poser une
vrai question philosophique : Doit-on se laver les mains lorsqu'elles sont
sales ou lorsqu'il y a assez de monde pour nous dire qu'elle le sont ?

... :-)


Avatar
Olivier Thomann
dans mon cas tous mes soils sont construits comme ArrayList<Soil>, c'est
peut-être (encore?) un pb spécifique à eclipse...
Si tu as des soucis avec Eclipse, entre un problème sur

https://bugs.eclipse.org/bugs/enter_bug.cgi
Composant JDT/Core
Fournis nous des étapes pour reproduire le problème et si problème il y
a, il sera corrigé.
--
Olivier

1 2