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

Probleme Java5: Generics et Collection

6 réponses
Avatar
alexandre cartapanis
Bonjour
Voila, j'ai une erreur etrange avec les generics: je definis deux methodes:

public void unregisterServices(Collection<ServiceReference> _references);
et
public void unregisterServices(Collection<String> _ids);

Impossible de compiler!! Les deux methodes sont de meme "nature"
(erasure). Si je comprends pourquoi (les deux parametres sont tous les
deux des collections) je ne comprends pas le bug: sinon, a quoi ca sert
les generics?!!
Si quelqu'un a une idée du pourquoi ou du comment, aidez moi svp parec
que la je panique :)

6 réponses

Avatar
Kupee
alexandre cartapanis wrote:
Bonjour
Voila, j'ai une erreur etrange avec les generics: je definis deux methodes:

public void unregisterServices(Collection<ServiceReference> _references);
et
public void unregisterServices(Collection<String> _ids);

Impossible de compiler!! Les deux methodes sont de meme "nature"
(erasure). Si je comprends pourquoi (les deux parametres sont tous les
deux des collections) je ne comprends pas le bug: sinon, a quoi ca sert
les generics?!!
Si quelqu'un a une idée du pourquoi ou du comment, aidez moi svp parec
que la je panique :)


Les generics ne font a priori qu'un travail a la compilation. Sinon tu
ne pourrai pas compiler en ayant pour cible des JVM antérieures a Java 1.5

Avatar
alexandre cartapanis
alexandre cartapanis wrote:

Bonjour
Voila, j'ai une erreur etrange avec les generics: je definis deux
methodes:

public void unregisterServices(Collection<ServiceReference> _references);
et
public void unregisterServices(Collection<String> _ids);

Impossible de compiler!! Les deux methodes sont de meme "nature"
(erasure). Si je comprends pourquoi (les deux parametres sont tous les
deux des collections) je ne comprends pas le bug: sinon, a quoi ca sert
les generics?!!
Si quelqu'un a une idée du pourquoi ou du comment, aidez moi svp parec
que la je panique :)



Les generics ne font a priori qu'un travail a la compilation. Sinon tu
ne pourrai pas compiler en ayant pour cible des JVM antérieures a Java 1.5
ben justement, c pas logique dans ce cas. Si le travail est fait a la

compilation, il doit bien voir que Collection<String> est differend de
Collection<ServiceReference>...
Qd a compiler pour une version anterieur, je suis pas sur, mais je crois
que ca marche pas justement.


Avatar
alexandre cartapanis

alexandre cartapanis wrote:


Bonjour
Voila, j'ai une erreur etrange avec les generics: je definis deux
methodes:

public void unregisterServices(Collection<ServiceReference> _references);
et
public void unregisterServices(Collection<String> _ids);

Impossible de compiler!! Les deux methodes sont de meme "nature"
(erasure). Si je comprends pourquoi (les deux parametres sont tous les
deux des collections) je ne comprends pas le bug: sinon, a quoi ca sert
les generics?!!
Si quelqu'un a une idée du pourquoi ou du comment, aidez moi svp parec
que la je panique :)



Les generics ne font a priori qu'un travail a la compilation. Sinon tu
ne pourrai pas compiler en ayant pour cible des JVM antérieures a Java 1.5


ben justement, c pas logique dans ce cas. Si le travail est fait a la
compilation, il doit bien voir que Collection<String> est differend de
Collection<ServiceReference>...
Qd a compiler pour une version anterieur, je suis pas sur, mais je crois
que ca marche pas justement.
effectivement, apres test de compilation:

javac: source release 1.5 requires target release 1.5
Donc du code en Java5 ne peut etre compilé QUE pour une JVM 1.5 (ou sup).



Avatar
Laurent Bossavit
Alexandre,

Si quelqu'un a une idée du pourquoi ou du comment, aidez moi svp parec
que la je panique :)


Un mot utile à apprendre: "erasure". Ca ne va pas résoudre ton problème
mais ça te permettra de comprendre pourquoi, ce qui sera peut-être une
consolation...

http://today.java.net/pub/a/today/2003/12/02/explorations.html

Laurent

Avatar
Simon OUALID
alexandre cartapanis wrote:
Qd a compiler pour une version anterieur, je suis pas sur, mais je crois
que ca marche pas justement.



Si si ça fonctionne, avec l'option "target" qui va bien ! :)

Les génériques ne sont "qu'une" vérification au compile time, le
bytecode ne change pas avec son utilisation.

Ca ne change pas non plus le typage de tes objets... Au runtime, on
continue a faire du cast à partir d'instances d'Object, sauf qu'on a
plus à se tapper le code pour le faire et que le compilateur nous
garantis au compile time qu'on aura pas de problème de cast.

Si le compilo te laissais passer au compile time, le runtime n'aurait
aucun moyen de choisir la bonne méthode à exécuter au moment d'un appel
à unregisterServices(Collection).

Avatar
alexandre cartapanis
Alexandre,


Si quelqu'un a une idée du pourquoi ou du comment, aidez moi svp parec
que la je panique :)



Un mot utile à apprendre: "erasure". Ca ne va pas résoudre ton problème
mais ça te permettra de comprendre pourquoi, ce qui sera peut-être une
consolation...

http://today.java.net/pub/a/today/2003/12/02/explorations.html

Laurent


J'avais vue la "traduction" du mot, mais pas vraiment la definition
Java, ca m'a l'air super interressant, je vais regarder, merci :)