Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
KiLVaiDeN
"MiXAO" wrote in message news:418ccc1c$0$5944$
J'utilise Eclipse 3.1 M2.
J'ai écris cela :
private class Legume {
}
private class Carotte extends Legume {
}
et dans mon code :
ArrayList<Legume> list = new ArrayList<Legume>(); list.add(new Carotte());
Et ca compile !! Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Une Carotte, peut se comporter comme un Legume, donc déclarer une variable de "type" Legume, pour y mettre une instance de Carotte, n'a rien de choquant.
Tu peux faire pareil avec n'importe quel variable de type Object (la superclasse de Java):
Objet o = new Carotte();
Dans le même principe, imaginons que tu souhaites passer en paramètre d'une méthode une ArrayList. Il est mieux de passer une variable de type Collection, puis de traiter ton ArrayList avec les méthodes définie dans "Collection" ( hasNext, next, iterator, etc ), ce qui aura pour avantage de permettre une évolution le jour ou l'ArrayList ne fournira plus les fonctionnalités que tu souhaites.
Ce cas est cependant différent car Collection est une interface. Il vaut mieux que dans tes programmes tu cherches au maximum à transformer tes dépendances de type héritage, en dépendances de type "interface". Si ta classe Legume ne comporte que des méthodes, transforme la en Interface, ça te permettra d'alléger les dépendances de ton programme et de le rendre plus modulable par la suite.
Je te conseille de jeter un oeil sur l'utilisation des interfaces, c'est une notion clé de la programmation Java.
K
"MiXAO" <truc@machin.bidule> wrote in message
news:418ccc1c$0$5944$636a15ce@news.free.fr...
J'utilise Eclipse 3.1 M2.
J'ai écris cela :
private class Legume {
}
private class Carotte extends Legume {
}
et dans mon code :
ArrayList<Legume> list = new ArrayList<Legume>();
list.add(new Carotte());
Et ca compile !!
Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus
propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Une Carotte, peut se comporter comme un Legume, donc déclarer une variable
de "type" Legume, pour y mettre une instance de Carotte, n'a rien de
choquant.
Tu peux faire pareil avec n'importe quel variable de type Object (la
superclasse de Java):
Objet o = new Carotte();
Dans le même principe, imaginons que tu souhaites passer en paramètre d'une
méthode une ArrayList. Il est mieux de passer une variable de type
Collection, puis de traiter ton ArrayList avec les méthodes définie dans
"Collection" ( hasNext, next, iterator, etc ), ce qui aura pour avantage de
permettre une évolution le jour ou l'ArrayList ne fournira plus les
fonctionnalités que tu souhaites.
Ce cas est cependant différent car Collection est une interface. Il vaut
mieux que dans tes programmes tu cherches au maximum à transformer tes
dépendances de type héritage, en dépendances de type "interface". Si ta
classe Legume ne comporte que des méthodes, transforme la en Interface, ça
te permettra d'alléger les dépendances de ton programme et de le rendre plus
modulable par la suite.
Je te conseille de jeter un oeil sur l'utilisation des interfaces, c'est une
notion clé de la programmation Java.
ArrayList<Legume> list = new ArrayList<Legume>(); list.add(new Carotte());
Et ca compile !! Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Une Carotte, peut se comporter comme un Legume, donc déclarer une variable de "type" Legume, pour y mettre une instance de Carotte, n'a rien de choquant.
Tu peux faire pareil avec n'importe quel variable de type Object (la superclasse de Java):
Objet o = new Carotte();
Dans le même principe, imaginons que tu souhaites passer en paramètre d'une méthode une ArrayList. Il est mieux de passer une variable de type Collection, puis de traiter ton ArrayList avec les méthodes définie dans "Collection" ( hasNext, next, iterator, etc ), ce qui aura pour avantage de permettre une évolution le jour ou l'ArrayList ne fournira plus les fonctionnalités que tu souhaites.
Ce cas est cependant différent car Collection est une interface. Il vaut mieux que dans tes programmes tu cherches au maximum à transformer tes dépendances de type héritage, en dépendances de type "interface". Si ta classe Legume ne comporte que des méthodes, transforme la en Interface, ça te permettra d'alléger les dépendances de ton programme et de le rendre plus modulable par la suite.
Je te conseille de jeter un oeil sur l'utilisation des interfaces, c'est une notion clé de la programmation Java.
K
MiXAO
KiLVaiDeN wrote:
"MiXAO" wrote in message news:418ccc1c$0$5944$
J'utilise Eclipse 3.1 M2.
J'ai écris cela :
private class Legume {
}
private class Carotte extends Legume {
}
et dans mon code :
ArrayList<Legume> list = new ArrayList<Legume>(); list.add(new Carotte());
Et ca compile !! Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
KiLVaiDeN wrote:
"MiXAO" <truc@machin.bidule> wrote in message
news:418ccc1c$0$5944$636a15ce@news.free.fr...
J'utilise Eclipse 3.1 M2.
J'ai écris cela :
private class Legume {
}
private class Carotte extends Legume {
}
et dans mon code :
ArrayList<Legume> list = new ArrayList<Legume>();
list.add(new Carotte());
Et ca compile !!
Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus
propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je
connais le polymorphisme (mais pas beaucoup java) mais alors je précise
ma question; à quoi servent les bounded wildcard ?
ArrayList<Legume> list = new ArrayList<Legume>(); list.add(new Carotte());
Et ca compile !! Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
KiLVaiDeN
"MiXAO" wrote in message news:418e9b90$0$32078$
KiLVaiDeN wrote:
"MiXAO" wrote in message news:418ccc1c$0$5944$
J'utilise Eclipse 3.1 M2.
J'ai écris cela :
private class Legume {
}
private class Carotte extends Legume {
}
et dans mon code :
ArrayList<Legume> list = new ArrayList<Legume>(); list.add(new Carotte());
Et ca compile !! Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
Dans ce cas je pense que la réponse à ta question se trouve dans le chapitre 3 du document que tu as fourni ( page 4 ), désolé de m'être trompé sur le sens de ta question!
K
"MiXAO" <truc@machin.bidule> wrote in message
news:418e9b90$0$32078$636a15ce@news.free.fr...
KiLVaiDeN wrote:
"MiXAO" <truc@machin.bidule> wrote in message
news:418ccc1c$0$5944$636a15ce@news.free.fr...
J'utilise Eclipse 3.1 M2.
J'ai écris cela :
private class Legume {
}
private class Carotte extends Legume {
}
et dans mon code :
ArrayList<Legume> list = new ArrayList<Legume>();
list.add(new Carotte());
Et ca compile !!
Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus
propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je
connais le polymorphisme (mais pas beaucoup java) mais alors je précise
ma question; à quoi servent les bounded wildcard ?
MiXAO
Dans ce cas je pense que la réponse à ta question se trouve dans le chapitre
3 du document que tu as fourni ( page 4 ), désolé de m'être trompé sur le
sens de ta question!
ArrayList<Legume> list = new ArrayList<Legume>(); list.add(new Carotte());
Et ca compile !! Est-ce normal ?
Dans ce tutorial: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
Je vois qu'ils parlent des "Bounded Wildcard". (4.1, page 6).
public void drawAll(List<? extends Shape> shapes)
Dois-je moi aussi déclarer ma liste comme ceci pour que cela soit plus propre ?
Tu poses le doigt sur ce que l'on appelle le polymorphisme.
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
Dans ce cas je pense que la réponse à ta question se trouve dans le chapitre 3 du document que tu as fourni ( page 4 ), désolé de m'être trompé sur le sens de ta question!
K
Vincent Cantin
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
J'imagine que dans la class ArrayList, tu peux faire des choses differentes si le type est "? extends Legume" et "Legume". Par exemple, tu peux peut-etre faire des cast qui ne seront pas forcement non-checked (juste une idee comme ca).
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je
connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma
question; à quoi servent les bounded wildcard ?
MiXAO
J'imagine que dans la class ArrayList, tu peux faire des choses differentes
si le type est "? extends Legume" et "Legume". Par exemple, tu peux
peut-etre faire des cast qui ne seront pas forcement non-checked (juste une
idee comme ca).
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
J'imagine que dans la class ArrayList, tu peux faire des choses differentes si le type est "? extends Legume" et "Legume". Par exemple, tu peux peut-etre faire des cast qui ne seront pas forcement non-checked (juste une idee comme ca).
Nico
"MiXAO" a écrit
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
Voila ce que j'en ai compris des bounded wildcards :
Dans ton cas, la classe Carotte dérive de la classe Legume mais ArrayList<Carotte> ne dérive pas de ArrayList<Legume>. Le résultat, c'est que si tu définis une méthode "maMethode(ArrayList<Legume>)", tu ne pourras pas lui passer une ArrayList<Carotte> car ce n'est pas une ArrayList<Legume>. Par contre, si tu définis une méthode "maMethode(ArrayList<? extends Legume>)", alors tu peux aussi bien lui passer une ArrayList<Legume> ou une ArrayList<Carotte>.
"MiXAO" <truc@machin.bidule> a écrit
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je
connais le polymorphisme (mais pas beaucoup java) mais alors je précise
ma question; à quoi servent les bounded wildcard ?
MiXAO
Voila ce que j'en ai compris des bounded wildcards :
Dans ton cas, la classe Carotte dérive de la classe Legume mais
ArrayList<Carotte> ne dérive pas de ArrayList<Legume>.
Le résultat, c'est que si tu définis une méthode
"maMethode(ArrayList<Legume>)", tu ne pourras pas lui passer une
ArrayList<Carotte> car ce n'est pas une ArrayList<Legume>.
Par contre, si tu définis une méthode "maMethode(ArrayList<? extends
Legume>)", alors tu peux aussi bien lui passer une ArrayList<Legume> ou une
ArrayList<Carotte>.
Merci d'avoir pris la peine de me faire une réponse aussi longue mais je connais le polymorphisme (mais pas beaucoup java) mais alors je précise ma question; à quoi servent les bounded wildcard ?
MiXAO
Voila ce que j'en ai compris des bounded wildcards :
Dans ton cas, la classe Carotte dérive de la classe Legume mais ArrayList<Carotte> ne dérive pas de ArrayList<Legume>. Le résultat, c'est que si tu définis une méthode "maMethode(ArrayList<Legume>)", tu ne pourras pas lui passer une ArrayList<Carotte> car ce n'est pas une ArrayList<Legume>. Par contre, si tu définis une méthode "maMethode(ArrayList<? extends Legume>)", alors tu peux aussi bien lui passer une ArrayList<Legume> ou une ArrayList<Carotte>.