Questions sur la généricité.

Questions sur la généricité. - Java - Programmation

Marsh Posté le 11-04-2005 à 12:23:22    

Salut, voilà j'ai quelques questions sur la généricité :
 
  - Sachant qu'une classe fille est un sous-type de sa classe mere, pourquoi une        
    ArrayList<Integer> n'est pas un sous-type d'une ArrayList<Number> ? (pourtant Integer est    
    bien une classe fille de Number)
 
  - Si on a une methode void f(List<? extends Figure> liste){
    // Pourquoi on ne peut faire  
    Cercle c = list.get(0); // Cercle est supposé être un sous-type de Figure  
    }
   
  - Comment interpreter "en francais" un truc du style :
    <T> boolean containsAll(Collection<T> c); //le premier <T>, il sert à quoi ?
 
Quelqu'un pourrait il m'éclaircir svp.


Message édité par Chronoklazm le 11-04-2005 à 12:23:36

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 11-04-2005 à 12:23:22   

Reply

Marsh Posté le 11-04-2005 à 13:42:56    

1) 'me sousviens plus mais y'avait une bonne raison
2) parce que list.get(0) peut te renvoyer un Carré.
  c'est pour pouvoir faire list.add(monCarré) qu'on utilise ce type, pas dans l'autre sens.
 
3) pour dire que T est une inconnue, pour pas que le compilo tente d'aller chercher une classe T et qu'il ne la trouve pas et rale.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-04-2005 à 13:55:21    

Ok merci beacoup :)
 
J'ai une autre question, je suis entrain d'implementer une classe ABR génerique et je bloque sur la compraison d'objets dont le type est "un parametre de type", bref :
 

Code :
  1. public class ArbreBinaireRecherche<E> implements java.lang.Comparable<E>{
  2.    
  3.     ///////////////////////////////
  4.     private Noeud<E> racine = null;
  5.     ///////////////////////////////
  6.    
  7.     private ArbreBinaireRecherche<E> sGauche = null;
  8.     private ArbreBinaireRecherche<E> sDroit = null;
  9.    
  10.     /** Creates a new instance of ArbreBinaireRecherche */
  11.     public ArbreBinaireRecherche() {
  12.         this.racine = racine;
  13.         this.sGauche = sGauche;
  14.         this.sDroit = sDroit;
  15.     }
  16.    
  17.     /** Creates a new instance of ArbreBinaireRecherche */
  18.     public ArbreBinaireRecherche(Noeud<E> racine) {
  19.         this.racine = racine;
  20.         this.sGauche = sGauche;
  21.         this.sDroit = sDroit;
  22.     }
  23.    
  24.     public Noeud<E> getRacine(){
  25.         return this.racine;
  26.     }
  27.    
  28.     public ArbreBinaireRecherche<E> getSGauche(){
  29.         return new ArbreBinaireRecherche<E>(this.racine.getFg());
  30.     }
  31.    
  32.     public ArbreBinaireRecherche<E> getSDroit(){
  33.         return new ArbreBinaireRecherche<E>(this.racine.getFd());
  34.     }
  35.    
  36.     public void setRacine(Noeud<E> racine){
  37.         this.racine = racine;
  38.     }
  39.    
  40.     /**
  41.      * Methode pour rajouter un élément dans un arbre.
  42.      */
  43.     public void addElement(E element){
  44.         // Cas ou la racine est une feuille
  45.         if (this.racine.isFeuille()){
  46.            
  47.             // Cas ou la valeur de la racine est null
  48.             if (this.racine.getValeur() == null)
  49.                 this.racine.setValeur(element);
  50.             // Si la valeur n'est pas null alors ...
  51.             else{
  52.                 // On crée le nouveau noeud à inserer.
  53.                 Noeud<E> temp = new Noeud<E>(element);
  54.                 //La il faudrait mettre la compareTo, mais c'est justement le probleme car Object a que equals() et n'a pas de compareTo()...
  55.                 if(element.compareTo(this.racine.getValeur()))
  56.                     this.racine.setFg(temp);
  57.                 else
  58.                     this.racine.setFd(temp);
  59.             }
  60.         }
  61.         // Si la racine n'est pas une feuille.
  62.         else {
  63.             if(element <= this.racine.getValeur())
  64.                 this.getSGauche.addElement(element); // J'ai pas fini encore ..  
  65.             else
  66.                 this.getSDroit.addElement(element);
  67.         }
  68.        
  69.     }
  70.     public int compareTo(E o){
  71.         return 0; // Là je sais pas quoi mettre ...
  72.     }
  73. }


 
En gros, comment puis-je comparer la valeur de la racine avec l'élement à inserer si je ne connait pas le type de la valeur de la racine, <E> ici ?
 
EDIT : Comment dire que E va implementer Comparable ?


Message édité par Chronoklazm le 11-04-2005 à 14:34:01

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 11-04-2005 à 14:01:14    

1) ben t'as donné toi même la réponse. Ce sont les éléments qui sont parents, pas les conteneurs.

Reply

Marsh Posté le 11-04-2005 à 14:20:41    

Merci Taz.
 
Sinon pour mon ABR j'ai bien l'impression qu'il faut que j'ajoute un comparator en attribut de la classe pour avoir un moyen plus souple de comparer les elements, parce que là avec une seule compareTo je m'en sortirais pas :(


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 11-04-2005 à 15:42:58    

Code :
  1. //...
  2. if(((Comparable<E> )element).compareTo(this.racine.getValeur()))
  3.                      this.racine.setFg(temp);
  4. //...


 
Je sais que c'est bourrin de caster comme ca mais y a t il un autre moyen de dire qu'un objet de type E va implementer comparable ???


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 11-04-2005 à 15:46:44    

oui, <E extends Comparable>


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-04-2005 à 15:59:21    

Ok et si on est pas sur, enfin je veux dire si on est pas sur que E va forcement l'implementer ?


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 11-04-2005 à 16:10:30    

genre un truc un peu normand ?  
p'têt ben qu'oui, p'têt ben qu'non ...


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-04-2005 à 16:26:11    

Bein oué des StringBuffer ou StringBuilder par exemple  :??:
 
EDIT :  
Avec ta technique, si j'ai un
public class ArbreBinaireRecherche<E extends java.lang.Comparable> mon ABR ne pourras contenir QUE des objets qui implementent comparable, c'est pas top ca.


Message édité par Chronoklazm le 11-04-2005 à 16:30:58

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 11-04-2005 à 16:26:11   

Reply

Marsh Posté le 11-04-2005 à 16:36:42    

en même temps, pour avoir un arbre binaire, c'est plus facile quand il existe une comparaison.
 
Si tu veux laisser la possibilité d'avoir un comparateur externe, heu, je t'explique la feinte dès que j'ai plus de temps mais c'est assez malin.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 11-04-2005 à 16:39:45    

nraynaud a écrit :

en même temps, pour avoir un arbre binaire, c'est plus facile quand il existe une comparaison.
 
Si tu veux laisser la possibilité d'avoir un comparateur externe, heu, je t'explique la feinte dès que j'ai plus de temps mais c'est assez malin.


http://java.sun.com/j2se/1.4.2/doc [...] rator.html http://membres.lycos.fr/gggrrrreeeggg/smileys/pingouino%20dei.gif


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 11-04-2005 à 16:59:30    

-- > oué, mais il faut wrapper le truc pour qu'un coup la classe dépende d'un comparator interne qui utilise le compare de l'objet et d'un autre elle dépende d'un comparator qui est passé en argument à la création, le tout bien typé.
 


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 14:42:59    

C'est ce que je suis entrain d'essayer de capter justement.
 
Dans un bouquin j'ai trouvé ce truc comme attribut d'une classe qui permet de preciser au constructeur si on veut garder l'ordre naturel (donc se fier a la compareTo) ou donner une instance de Comparator pour trier selon nos criteres.
 

Code :
  1. private Comparator<? super E> nameOfTheComparator;


 
Deja je pige pas comment ca se lit se truc; "Un comparator de quelque chose qui est une classe mere de E" ??
 
Pourquoi ce joker et pas simplement <E> ????


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-04-2005 à 15:04:37    

héhéhé, erreur classique de débutant.
 
 
si tu as un Comparator<Object>, ça t'empêche pas de faire comparator.compare(new Integer(10), "10" )
 
(d'un point de vue types)
 
Simplement là, tu as besoin d'un truc capable de comparer des E entre eux. Si tu fais simplement  
 
private Comparator<E> nameOfTheComparator;
 
un Comparator<Object> universel ne passerait pas (si E != Object) or ce n'est pas ce que tu voulais exprimer. Tu veux un truc qui est capable de comparer des E, et un Comparator<Object> est parfaitement cvapable de le faire, il n'y a pas de raison d'empêcher cet argument de passer.
 


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 16:42:44    

ese-aSH a écrit :

tu devrai etre prudent dans l'utilisation des generiques (je connai pas ton niveau de java mais bon) : c'est juste des astuces syntaxiques destinées a cacher la maniere dont les choses se passent reelement, avec pour consequence une perte de comprehension relative de quoi est quoi.


bien au contraire, on fait apparaître un sens nouveau aux choses.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 17:11:41    

nraynaud => Merci !
 
ese-aSH => Je suis pas tres fort en Java mais je me debrouille (merci les forums et google), sinon ... la possibilité de parametrer une classe ou une methode par une autre classe c'est assez puissant enfait et comme je n'ai pas fait de choses comme ca sans la genericité j'imagine pas le merdier :/ pour cette implementation.
 

Code :
  1. /*
  2. * ArbreBinaireRecherche.java
  3. *
  4. * Created on 11 avril 2005, 11:45
  5. */
  6. package fr.unice.abr;
  7. import java.lang.Comparable; // L'interface pour comparer des E
  8. import java.util.Comparator; // L'interface pour preciser l'odre, dans le cas ou E n'est pas comparable
  9. import java.util.List;       // L'interface pour ArrayList.
  10. import java.util.ArrayList;  // La classe ArrayList pour recuperer un Iterator de l'arbre  
  11. import java.lang.Iterable;   // Pour les for-each
  12. import java.util.Iterator;   // L'interface permettant de recuperer des Iterator à partir des listes
  13. /**
  14. * Classe representant un ArbreBinaireRecherche.
  15. * @author Chronk
  16. */
  17. public class ArbreBinaireRecherche<E> implements Iterable<E>{
  18.    
  19.     ///////////////////////////////
  20.     private Noeud<E>  racine = null;
  21.     ///////////////////////////////
  22.    
  23.     /**
  24.      * Comparateur utilise pour comparer les elements.
  25.      * null si l'arbre utilise l'ordre naturel sur E (Comparable).
  26.      */
  27.     private Comparator<E> comparateur;
  28.      
  29.     /** Creates a new instance of ArbreBinaireRecherche (basique)*/
  30.     public ArbreBinaireRecherche() {
  31.         this.racine = racine;
  32.         this.comparateur = null;
  33.     }
  34.    
  35.     /**
  36.      * Creates a new instance of ArbreBinaireRecherche
  37.      * (avec l'element de la racine)
  38.      */
  39.     public ArbreBinaireRecherche(E element) {
  40.         this.racine = new Noeud<E>(element);
  41.         this.comparateur = null;
  42.     }
  43.    
  44.     /**
  45.      * Creates a new instance of ArbreBinaireRecherche
  46.      * (avec l'element de la racine)
  47.      */
  48.     public ArbreBinaireRecherche(E element, java.util.Comparator<E> comparateur) {
  49.         this.racine = new Noeud<E>(element);
  50.         this.comparateur = comparateur;
  51.     }
  52.    
  53.     /**
  54.      * Creates a new instance of ArbreBinaireRecherche
  55.      * (avec le noeud directement)
  56.      */
  57.     public ArbreBinaireRecherche(Noeud<E> racine) {
  58.         this.racine = racine;
  59.         this.comparateur = null;
  60.     }
  61.    
  62.     public Noeud<E> getRacine(){
  63.         return this.racine;
  64.     }
  65.    
  66.     public ArbreBinaireRecherche<E> getSGauche(){
  67.         return new ArbreBinaireRecherche<E>(this.racine.getFg());
  68.     }
  69.    
  70.     public ArbreBinaireRecherche<E> getSDroit(){
  71.         return new ArbreBinaireRecherche<E>(this.racine.getFd());
  72.     }
  73.    
  74.     public void setRacine(Noeud<E> racine){
  75.         this.racine = racine;
  76.     }
  77.    
  78.     /**
  79.      * Methode pour rajouter un élément dans un arbre.
  80.      */
  81.     public  void addElement(E element){
  82.         // Cas ou la racine est une feuille
  83.         if (this.racine.isFeuille()){
  84.             // Cas ou la valeur de la racine est null
  85.             if (this.racine.getValeur() == null)
  86.                 this.racine.setValeur(element);
  87.             // Si la valeur n'est pas null alors ...
  88.             else{
  89.                 // On crée le nouveau noeud à inserer.
  90.                 Noeud<E> temp = new Noeud<E>(element);
  91.                 //La il faudrait mettre la compareTo ...
  92.                 //On dit expressement que E va implementer Comparable
  93.                 if(this.compare(element, this.racine.getValeur()) <= 0)
  94.                     this.racine.setFg(temp);
  95.                 else
  96.                     this.racine.setFd(temp);
  97.             }
  98.         }
  99.         // Si la racine n'est pas une feuille.
  100.         else {
  101.             if(this.compare(element, this.racine.getValeur()) <= 0)
  102.                 this.getSGauche().addElement(element);
  103.             else
  104.                 this.getSDroit().addElement(element);
  105.         }
  106.     }
  107.    
  108.     /**
  109.      * Methode qui permet de dire si un element de type E existe dans cet arbre.
  110.      * @param element L'élement dont on va chercher l'occurence.
  111.      * @return true si element est deja present dans l'ABR sinon false
  112.      */
  113.     public boolean contient(E element){
  114.         // On parcours normalement
  115.         // Cas ou la racine est une feuille
  116.         if (this.racine.isFeuille()){
  117.             return this.racine.getValeur().equals(element);
  118.         }
  119.         // Si la racine n'est pas une feuille.
  120.         else { // Si plus petit ou egal on plonge a gauche sinon à droite
  121.             if(this.compare(element, this.racine.getValeur()) <= 0)
  122.                 return this.getSGauche().contient(element);
  123.             else
  124.                 return this.getSDroit().contient(element);
  125.         }
  126.     }
  127.    
  128.     /**
  129.      * Parcours infixe pour l'affichage
  130.      * Donne l'ordre naturel. (mythoné car ne renvoi pas une string, sera fait à partir de l'Iterator)
  131.      */
  132.     public String toString(){
  133.         this.afficheInfixe();
  134.         return "";
  135.     }
  136.    
  137.     /**
  138.      * Methode qui parcours puis affiche l'arbre selon le parcours infixe.
  139.      */
  140.     public void afficheInfixe() {
  141.         if (this.racine != null) {
  142.             this.getSGauche().afficheInfixe();
  143.             System.out.println(this.racine.toString());
  144.             this.getSDroit().afficheInfixe();
  145.         }
  146.     }
  147.    
  148.     /**
  149.      * Methode privée qui permet de selectionner l'ordre des elements  
  150.      * Soit le Comparateur a été precisé et on l'utilise, soit
  151.      * il est null dans ce cas on utilise l'ordre naturel des elements
  152.      * dont la classe implementera Comparable<E>
  153.      */
  154.     private int compare(E e1, E e2){
  155.        
  156.         // Si le comparateur est null on utilise l'ordre naturel
  157.         if(this.comparateur == null)
  158.             return ((Comparable<E> )e1).compareTo(e2);
  159.         else // sinon on utilise le comparateur
  160.             return this.comparateur.compare(e1, e2);
  161.     }
  162.    
  163.     /**
  164.      * Methode qui permet de recuperer un Iterator<E> à partir de l'arbre.  
  165.      * (pas de modifications possibles de l'arbre) Pour la boucle for-each !!!
  166.      */
  167.     public Iterator<E> iterator(){
  168.         // Creation d'une ArrayList de E
  169.         List<E> l = new ArrayList<E>();
  170.         // On rajoute dans la liste l les elements de l'arbre en la parcourant en infixe.
  171.         this.fillList(this.racine, l);
  172.         return l.iterator();
  173.     }
  174.    
  175.     /**
  176.      * Methode qui permet de rajouter des elements de l'arbre dans une liste.
  177.      * Parcours infixe. (ordre croissant)
  178.      * @param n Le noeud de depart.
  179.      * @param list La liste dans laquelle on va rajouter les elements.
  180.      */
  181.     private void fillList(Noeud<E> n, List<E> list){
  182.         if (n != null){
  183.             this.fillList(n.getFg(), list);
  184.             list.add(n.getValeur());
  185.             this.fillList(n.getFd(), list);
  186.         }
  187.     }
  188. }


 
Il y a surement quelques trucs a simplifier ou/et à optimiser (notament ma facon de chopper l'Iterator) mais sinon ca marche au top, on peut preciser son Comparator (donc ca marche meme pour les StringBuffer et autres barbares), on peut faire du for-each etc ...


Message édité par Chronoklazm le 12-04-2005 à 17:23:42

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-04-2005 à 17:20:58    

pitié le melange français/anglais [:ciler]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-04-2005 à 17:24:49    

Je l'avais dis qu'il y avait des choses a optimiser  [:chronoklazm]


Message édité par Chronoklazm le 12-04-2005 à 17:29:45

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-04-2005 à 17:49:27    

ese-aSH a écrit :

ben non, c'est syntaxique, derriere c'est compilé comme avant ^^ a priori les *vrais* générique seront présent dans java6 (mustang) voire meme plutot java7 (dolphin). la ca s'appelle une arnaque pour pas se faire totalement etaler par .NET =]


[:kiki]
une analyse d'une hauteur digne de l'EPITA.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 18:02:20    

ese-aSH a écrit :

j'ai probablement fait mieux que toi niveau etudes en info :]


ouyeah, ça casse severe ici http://iicrew.free.fr/smileys/smileys/omer.s.gif


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-04-2005 à 18:03:20    

ese-aSH a écrit :

ba regarde le code compilé


parce que le développement ça se limite à du code compilé ?
 
l'inférence, la théorie des types, la qualité, la sécurité, l'analyse fonctionnelle etc.  
ça compte pas ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 18:09:41    

Ca vous dit pas de parler de généricité au lieu de vous http://www.pcinpact.com/forum/html/emoticons/lsvader.gif


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 12-04-2005 à 18:12:07    

ese-aSH a écrit :

un mec qui vient chier comme ca sur une école a base de 'moi jtemmerde j'ai fait X'


c'est pas exactement mon propos ... mais c'est pas grave.
 
Par contre, qu'un mec sorte de nullepart pour dire des conneries sur un truc dont il n'a manifestement pas compris l'esprit, ça me fout hors de moi.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 18:39:30    

[:drapal]

Reply

Marsh Posté le 12-04-2005 à 18:52:06    

ese-aSH a écrit :

1)et toi tu sors d'ou ?  
 
2) tu fais partie des gens a qui ont dit "c'est beau ca brille" et hop t'es content ?  
 
3) tu sais ce que c'est un template sur .NET (je presume que oui). tu trouve que les generiques c'est mieux ?  
 
4) pour des programmeurs *avancés* ca peut eclaicir le code, mais pour des gens qui ne comprennent pas ce qu'il y a derriere ben ca aboutit a n'iimporte quoi ^^.  
 
5) c'est ton boulot developpeur (je presume que oui) ? tu connais un peu les pressions .NET/java ?  
 
6) les generiques ont etes rajoutes en speed pour rester un minimum concurentiel, mais c'est creux, c'est juste une autre maniere d'ecrire ce que tu pouvais deja faire avant ^^ jdi pas qu'il faut pas s'en servir  
 
7) je fais juste remarquer que ca amene a des mecomprehensions de comment les choses fonctionnent.
 
8) et hop (deflag) j'aime pas ces debats creux et tu aura sans doute plus de choses a dire au createur du topic que moi ^^


1) de ton cul, biensûr (toujours élever le débat)
 
2) je suis mondialement connu pour ma naïveté vis-a-vis des technos, grand lecteur de 01 micro [:kiki]
 
3) rien à faire que ce soit mieux ou moins bien, c'est différent, j'ai toujours évité les comparaisons primaires comme ça sur les technos (les gens c'est différent).
 
4) c'est pareil avec n'importe quel outil, G. Eiffel faisait du calcul de structures maillées avec des matrices, aujourd'hui on calcule des structures non-linéaires par Newton-Raphson avec un algo d'intégration de dingue. Ben pour faire plus complexe, on a besoin d'outils plus complexes et on forme les utilisateurs.
 
5) non, oui.
 
6) non. Dans cette veine, le langage java n'est finalement qu'un sucre syntaxique puisqu'on peut écrire le .class à la main dans un éditeur exadécimal. Ensuite, toute cette affaire de MDA ou de MDC (dans les systèmes physiques) serait complètement inutile puisqu'on peut tout faire à la main. Non on a besoin sans cesse de plus d'abstraction pour continuer à faire progresser la technologie. Ensuite, le critère fort de l'implémentation par erasure a été la compatibilité avec l'existant.
Java-le-langage ne se positionne pas en terme de nombre fonctionnalités, mais en terme de simplicité (là où C# part énormément dans les fonctionnalités et les divers sucres syntaxiques pour faciliter le quotidien du développeur).
 
7) je vois pas le rapport, tout nouvel outil nécessite une période d'adaptation.
 
8) en tout cas, des choses plus réfléchies. au-revoir.


Message édité par nraynaud le 12-04-2005 à 18:53:18

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 18:59:46    

ça c'est de la pelle à clous de kalitei [:aloy]

Reply

Marsh Posté le 12-04-2005 à 19:33:55    

mais c'est quoi ce caca nerveux [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-04-2005 à 19:38:43    

the real moins moins a écrit :

mais c'est quoi ce caca nerveux [:mlc]


Y4A UN PB ?  :fou:  
 
heu ben je sais pas moi, y'a des moment où il faut s'exprimer dans la vie.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 23:21:33    

nraynaud a écrit :

Y4A UN PB ?  :fou:  
 
heu ben je sais pas moi, y'a des moment où il faut s'exprimer dans la vie.


Ouais enfin c'est Mouinmouin qui te fait la remarque, le gars qui bondit de son siège et qui en fout 3 couches sur Blabla quand son stagiaire/collègue pond 2 lignes inutiles [:kiki]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 12-04-2005 à 23:29:58    

en meme temps, c'est pas à son post que je faisais allusion [:kiki]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-04-2005 à 23:32:17    

puisque c'est ça, j'installe mono :o
 
 
(je vais vérifier que winforms tourne sur quartz d'abord)


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-04-2005 à 23:38:46    

ese-aSH a écrit :

ben non, c'est syntaxique, derriere c'est compilé comme avant ^^ a priori les *vrais* générique seront présent dans java6 (mustang) voire meme plutot java7 (dolphin). la ca s'appelle une arnaque pour pas se faire totalement etaler par .NET =]


 :lol:  
Le gars qui a rien compris aux générics dans Java  :D

Reply

Marsh Posté le 13-04-2005 à 12:19:00    

benou a écrit :

:lol:  
Le gars qui a rien compris aux générics dans Java  :D


Il n'a pas fondamentalement tord.
Il est aisé de placer dans une "list" typée des éléments d'un autres types sans lever aucune exception lors de l'execution du programme..
Java utilise le RTTI mais dans le cas des generics on passe à coté  :(  

Reply

Marsh Posté le 13-04-2005 à 12:20:42    

phnatomass a écrit :

Il n'a pas fondamentalement tord.
Il est aisé de placer dans une "list" typée des éléments d'un autres types sans lever aucune exception lors de l'execution du programme..
Java utilise le RTTI mais dans le cas des generics on passe à coté  :(


encore un avis d'expert avisé [:kiki]

Reply

Marsh Posté le 13-04-2005 à 12:46:52    

phnatomass a écrit :

Il est aisé de placer dans une "list" typée des éléments d'un autres types sans lever aucune exception lors de l'execution du programme..


Tu as un exemple de code pour montrer ca ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 13-04-2005 à 13:09:38    

Voilà ce que je viens d'apprendre :

Citation :


Actions effectués par le compilateur :
  - Verifications du typage compte tenu de toutes les informations qu'il detient (params de type compris)
  - Remplacement des types parametrés par les types << raw >> correspondant
  - Remplacement des parametres de type par des types << ordinaires >>
  - Ajouts de casts si necessaires.
  - Ajout de méthodes << ponts >> si necessaires


 
Bon j'ai pas tout compris ... mais j'ai l'impression que ese-aSH n'a pas tort du tout.  
 
Schnapsman => C'est quoi le RTTI ?
 
EDIT : En gros c'est le compilo qui fait tout le travail pour permetres l'utilisations des generiques. Est-ce que ca veut dire que c'est juste un gadget syntaxique ???


Message édité par Chronoklazm le 13-04-2005 à 13:11:07

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 13-04-2005 à 13:36:22    

benou a écrit :

Tu as un exemple de code pour montrer ca ?


Code :
  1. import java.util.*;
  2. public class PourTest {
  3.    public void bof(List l)
  4.    {
  5.      // pas d'exception levée
  6.      l.add(2.5d);
  7.    }
  8.  
  9.    public void show(List l)
  10.    {
  11.       for(Object e : l)
  12.       {
  13. System.out.print(e + " " );
  14.       }
  15.    }
  16.  
  17.    public static void main(String [] args)
  18.    {
  19.       PourTest pt = new PourTest();
  20.       List l =new ArrayList<Integer>();
  21.       l.add(10);
  22.       pt.bof(l);
  23.       pt.show(l);
  24.    }
  25.  
  26.  
  27. }


Edit :
Evidemment il y a des petits warnings à la compilation


Message édité par phnatomass le 13-04-2005 à 13:46:01
Reply

Marsh Posté le 13-04-2005 à 13:39:07    

schnapsmann a écrit :

encore un avis d'expert avisé [:kiki]


Qui a parlé d'expertise.
Dans ce forum il y a toujours une volonté de casser le mec qui dit un truc plutot que de casser son argument.

Reply

Marsh Posté le 13-04-2005 à 13:53:06    

phnatomass a écrit :

Evidemment il y a des petits warnings à la compilation


ok ... tu dis quand même tout en 2 fois :)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed