Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2779 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Questions sur la généricité.

n°1045777
benou
Posté le 13-04-2005 à 13:53:06  profilanswer
 

Reprise du message précédent :

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
mood
Publicité
Posté le 13-04-2005 à 13:53:06  profilanswer
 

n°1045783
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 13:55:45  profilanswer
 

benou a écrit :

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


c'est pas géré, c'est vite dit.
La class cast exception qui ne va pas manquer d'arriver avec ce genre de conneries, c'est du poulet? :heink:


Message édité par schnapsmann le 13-04-2005 à 13:56:12
n°1045787
Chronoklaz​m
Posté le 13-04-2005 à 13:57:15  profilanswer
 

Phantomas => Alors là j'ai une question bete : Qu'est ce que t'appelle une liste typée ?
 
 - List<Integer> l = new ArrayList<Integer>();
 - List l = new ArrayList<Integer>();
 - List<Integer> l = new ArrayList();
 
 


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1045795
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 14:00:24  profilanswer
 

Chronoklazm a écrit :

Voilà ce que je viens d'apprendre :
[quote]
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 ???


RTTI veut dire Runtime Type Information (ou Identifiaction).
C'est a dire que lors de l'execution du programme on peut toujours connaitre le type précis d'un objet.
Exemple d'utilisation :

Code :
  1. public void plouf(){
  2.     Integer [] t = new Integer[1];
  3.     // Une exception sera levée car la methode bof place un Double dans le tableau d'entier
  4.     bof(t);
  5.   }
  6.   public void bof(Object [] l)
  7.    {
  8.      l[0] = 2.5d;
  9.    }


Dans le cas des generics il n y  a pas d'exception. voir 2 posts plus haut
Attention je ne dit nullement que l'implementation des generics est mauvaise mais effectivement elle pourrait être améliorer.


Message édité par phnatomass le 13-04-2005 à 14:27:34
n°1045807
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 14:04:49  profilanswer
 

Chronoklazm a écrit :

Phantomas => Alors là j'ai une question bete : Qu'est ce que t'appelle une liste typée ?


 - List<Integer> l = new ArrayList<Integer>();
 - List l = new ArrayList<Integer>();

n°1045818
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 14:08:51  profilanswer
 

schnapsmann a écrit :

c'est pas géré, c'est vite dit.
La class cast exception qui ne va pas manquer d'arriver avec ce genre de conneries, c'est du poulet? :heink:


Quelle ClassCastException ?
Dans l'exemple que j'ai donné j'aimerais bien une Exception mais il y en aucune de levé. Alors que si on utilise des tableaux,  des ClassCastException sont effectivement levées.
 

n°1045823
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 14:14:25  profilanswer
 

phnatomass a écrit :

Quelle ClassCastException ?
Dans l'exemple que j'ai donné j'aimerais bien une Exception mais il y en aucune de levé. Alors que si on utilise des tableaux,  des ClassCastException sont effectivement levées.


quel mongol tu fais mon pauvre ami
La class cast exception se produira quand tu voudra accéder à un item du mauvais type, pas avant.

n°1045835
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 14:24:37  profilanswer
 

schnapsmann a écrit :

quel mongol tu fais mon pauvre ami
La class cast exception se produira quand tu voudra accéder à un item du mauvais type, pas avant.


Mongol toi même.
Ce que je fait ds le prog c'est que je declare une liste d'entier et que finalement je peux y placer des doubles. D'ailleurs je peux même lire ces "double" sans choper d'exception.

Code :
  1. import java.util.*;
  2. public class PourTest {
  3.    public void bof(List l)
  4.    {
  5.      l.add(2.5d);
  6.    }
  7.  
  8.    public void lecture(List l)
  9.    {
  10.      double d = (Double) l.get(1);
  11.    }
  12.  
  13.    public void show(List l)
  14.    {
  15.   Iterator it = l.iterator();
  16.       for(Object e : l)
  17.       {
  18.       System.out.print(e + " " );
  19.   }
  20.    }
  21.  
  22.    public static void main(String [] args)
  23.    {
  24.       PourTest pt = new PourTest();
  25.       List<Integer> l =new ArrayList<Integer>();
  26.       //ajout d'entier
  27.       l.add(10);
  28.       // placement d'un double et pas d'exception
  29.       pt.bof(l);
  30.       // Lecture d'un double et pas d'exception
  31.       pt.lecture(l);
  32.       pt.show(l);
  33.    }
  34.  
  35. }


 
J'ai l'impression que tu prends vraiment des gens pour des cons sur ce forum alors que tes interventions sont purement inutiles.

n°1045843
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 14:29:36  profilanswer
 

phnatomass a écrit :


J'ai l'impression que tu prends vraiment des gens pour des cons sur ce forum alors que tes interventions sont purement inutiles.


c'est pas le problème, vu que ton cast explicite marche et qu'il porte sur le cas très interessant des types élémentaires.
 
Ton exemple est sans interet; les génériques sont juste une facilité d'écriture pour éviter de caster à tout va; et manisfestement tu ne l'a pas compris.

n°1045856
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 14:36:33  profilanswer
 

Bien sur que je l'ai compris. Mais quand ese-aSH l'a dit on l'a traité de con.
Mon exemple n'est pas sans interet car Benou me l'a demandé.
Pour en finir ese-aSH a raison en disant que les generics pourrait aller plus loin dans le controle de types, d'autant plus que le language java est capable de connaitre le type précis de tout objet instancié.

mood
Publicité
Posté le 13-04-2005 à 14:36:33  profilanswer
 

n°1045870
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 14:44:00  profilanswer
 

phnatomass a écrit :

Pour en finir ese-aSH a raison en disant que les generics pourrait aller plus loin dans le controle de types, d'autant plus que le language java est capable de connaitre le type précis de tout objet instancié.


Non, sachant à quoi servent les génériques, ça ne sert à *rien* [:pingouino]
 
Non, sachant que le choix a été fait de ne créer qu'une seul "object Class" pour toutes les "instances" d'un générique (au sens instanciation de template c++) [:pingouino]
 
Non, car ton exemple va provoquer une class cast exception dans les cas ou la conversion n'est pas possible [:pingouino]
 

n°1045925
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 15:01:44  profilanswer
 

1) Pour mon exemple change les types numériques par les classes de ton choix cela ne changera strictement rien au fond du problème.
2) Pour le reste manifestement on ne se comprend pas donc cela ne sert à rien de continuer à polluer le topic.
3) A l'avenir, tache de rester poli avec les intervenants du forum. Cela ne sert à rien d'être désagréable surtout quand ils n'ont pas tord.

n°1045943
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 15:07:14  profilanswer
 

sachant que tu avais tort, j'avais le droit de me relâcher, surtout avec le ton pédant que tu employais [:pingouino]

n°1045947
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 15:08:19  profilanswer
 

Non je n'avais pas tort

n°1045948
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 15:09:42  profilanswer
 

Je peux mettre ce que je veux dans un List<File>, alors que ce n'est pas le cas avec un File [] .

n°1045974
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 15:19:26  profilanswer
 

phnatomass a écrit :

Je peux mettre ce que je veux dans un List<File>, alors que ce n'est pas le cas avec un File [] .


oui j'ai pas dis le contraire [:pingouino]
mais les objet Class qui coresspond à la classe d'une instance de List<File> et à une instance de Liste<double> sont les mêmes, ce qui n'est pas le cas avec les classes d'un double[] vs et d'un File[].
Comment veux tu qu'ils fassent avec cette approche de la généricité?

n°1045979
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 15:25:41  profilanswer
 

Tu sais pourquoi on se tape dessus depuis 2heures ?
- Parce que je dis on ne peut pas faire A et que c'est dommage.
- Toi tu dis pourquoi on ne peut pas faire A.
On ne parle pas de la même chose c'est tout.

schnapsmann a écrit :

oui j'ai pas dis le contraire [:pingouino]
Comment veux tu qu'ils fassent avec cette approche de la généricité?


Justement à cause de cette approche ese-aSH a signalé que l'implementation java actuel des Generics étaient partiels comparé à celle de C#(que je ne connais pas d'ailleurs).

n°1045987
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 15:31:52  profilanswer
 

phnatomass a écrit :

Tu sais pourquoi on se tape dessus depuis 2heures ?
- Parce que je dis on ne peut pas faire A et que c'est dommage.
- Toi tu dis pourquoi on ne peut pas faire A.
On ne parle pas de la même chose c'est tout.
 
Justement à cause de cette approche ese-aSH a signalé que l'implementation java actuel des Generics étaient partiels comparé à celle de C#(que je ne connais pas d'ailleurs).


bein justement ces arguments (les choses qu'ont peu pas faire) je conteste leur interet profond. Certes on ne peut pas les faire, mais de toute façon ils recouvrent des scénarios faiblards sans aucun interet. Voilà j'espère que tu me suis là [:pingouino]

n°1046006
nraynaud
lol
Posté le 13-04-2005 à 15:40:29  profilanswer
 

phnatomass a écrit :

Je peux mettre ce que je veux dans un List<File>, alors que ce n'est pas le cas avec un File [] .


sans avoir de warning ?


---------------
trainoo.com, c'est fini
n°1046011
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 15:41:53  profilanswer
 

nraynaud a écrit :

sans avoir de warning ?


si il a reconnu les avoir tout à l'heure; mais c'est pas grave ça hein [:icon12]

n°1046014
nraynaud
lol
Posté le 13-04-2005 à 15:43:27  profilanswer
 

phnatomass a écrit :

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


ce code doit générer des dizaines de warnings. Ce qui est l'aspect visible des generics.


---------------
trainoo.com, c'est fini
n°1046015
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 15:43:36  profilanswer
 

Je suis d'accord mais Java nous a habitué justement au ClassCastException pour faire face aux "scenarii faiblards".
Personnellement (et je ne suis pas le seul)je trouve dommage que les generics ne fasse pas une verif en runtime dans le cas dont on parle(tableau vs liste typés par ex).
Ce n'est pas pour autant que je dit qu'il ne faut pas utiliser les generics ou que c'est nul.


Message édité par phnatomass le 13-04-2005 à 15:44:14
n°1046019
TheRom_S
Posté le 13-04-2005 à 15:45:34  profilanswer
 

bah quand t'as passé 2 heures à virer toutes les erreurs et qu'au final il te met juste un petit warning, tu te dis c'est pas grave paske t'as pas envie de tout recommencer ;)


---------------
The Rom's, à votre service
n°1046029
nraynaud
lol
Posté le 13-04-2005 à 15:48:05  profilanswer
 

phnatomass a écrit :


Personnellement (et je ne suis pas le seul)je trouve dommage que les generics ne fasse pas une verif en runtime dans le cas dont on parle(tableau vs liste typés).
Ce n'est pas pour autant que je dit qu'il ne faut pas utiliser les generics ou que c'est nul.


1) c'est pas fait car c'est inutile, tout est détecté statiquement. D'autre part, les perfs en souffrirait. Là on a un système qui dynamiquement ne change absolument pas (en dehors de cosmétisme) mais qui statiquement ajoute un nouveau champ de sécurité et d'expressivité. D'ailleur je suis convaincu que la comprenhension des design n'est vouée qu'à s'améliorer avec les generics : toutes ces petites questions de pourquoi ça marche ou pas, des gens on passé leur carrière sans se les poser.
2) ese l'a fait.


---------------
trainoo.com, c'est fini
n°1046035
nraynaud
lol
Posté le 13-04-2005 à 15:51:22  profilanswer
 

TheRom_S a écrit :

bah quand t'as passé 2 heures à virer toutes les erreurs et qu'au final il te met juste un petit warning, tu te dis c'est pas grave paske t'as pas envie de tout recommencer ;)


on ne vit pas dans le même monde.
Passer 2h sur une série d'erreur est anormal, on ne devrait jamais en avoir beaucoup à la fois. Ensuite, laisser passer des warnings sur des casts "unsafe" alors qu'on utilise des generics, c'est crétin, autant ne pas en utiliser du tout.
 
Pour l'intégration avec l'existant, il s'agit de délimiter les zones de "colle" (cast entre generics et raw) et de n'accepter les warnings que dans cette zone (je soupçonne que lors de la compilation du JDK, un certain nombre de warnings apparaîssent)


---------------
trainoo.com, c'est fini
n°1046036
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 15:51:26  profilanswer
 

nraynaud a écrit :

ce code doit générer des dizaines de warnings. Ce qui est l'aspect visible des generics.


1 warning uniquement  :)  

n°1046037
nraynaud
lol
Posté le 13-04-2005 à 15:52:08  profilanswer
 

oué, à l'affectation ?


---------------
trainoo.com, c'est fini
n°1046068
TheRom_S
Posté le 13-04-2005 à 16:02:52  profilanswer
 

oui 2h sur une série d'erreur c pas top (si ca te rassure ca m'arrive pas et ds la plupart des cas, je compile sans erreur du premier coup)
mais ca peut arriver dans le cas d'une erreur de conception et si tu finis par tout refaire différement et que t'as plus que 2 warning, t'es content si ils sont pas trop grave
après il reste à voir si tu accepte de garder des warnings ou si tu veux absolument un truc nikel, voire meme prouver ton code, etc ... ca depends de tes priorités (rapidité ou qualité)


---------------
The Rom's, à votre service
n°1046091
benou
Posté le 13-04-2005 à 16:14:29  profilanswer
 

schnapsmann a écrit :

quel mongol tu fais mon pauvre ami


tu te calmes s'il te plait  
 [:shakalagoons]  
 

schnapsmann a écrit :

j'avais le droit de me relâcher, surtout avec le ton pédant que tu employais [:pingouino]


ca c'est toi qui le dit :D
et la charte dis le contraire :o
 
Et je ne trouve pas qu'il ait utilisé de ton pédant (contrairement à toi, d'ailleur, cf ci-dessus).


---------------
ma vie, mon oeuvre - HomePlayer
n°1046096
nraynaud
lol
Posté le 13-04-2005 à 16:19:32  profilanswer
 

TheRom_S a écrit :

ca depends de tes priorités (rapidité ou qualité)


et de ton processus qualité (qui conditionnera ta ralonge en fin d'année).
 
Ceci dit, ça n'a rien à voir avec les generics.


---------------
trainoo.com, c'est fini
n°1046111
TheRom_S
Posté le 13-04-2005 à 16:28:01  profilanswer
 

nraynaud a écrit :

et de ton processus qualité (qui conditionnera ta ralonge en fin d'année).


 
ha ha ha  :lol: oui ca dépends surtout de ca en fait  :lol:


---------------
The Rom's, à votre service
n°1046113
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 16:28:19  profilanswer
 

nraynaud a écrit :

1) c'est pas fait car c'est inutile, tout est détecté statiquement. D'autre part, les perfs en souffrirait.  


J'avoue ne pas m'y connaitre en détail sur le fonctionnement interne de la JVM, mais naïvement je me suis dit qu'avec d'autres types java il y a un controle en Runtime, alors pourquoi un controle dans le cas de l'implementation des generics entraine forcement une chute des perfs?


Message édité par phnatomass le 13-04-2005 à 16:31:03
n°1046133
phnatomass
Je m'empare de ton esprit !!
Posté le 13-04-2005 à 16:36:20  profilanswer
 

nraynaud a écrit :

oué, à l'affectation ?


non à
l.add(...);

n°1046254
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 17:22:52  profilanswer
 

benou a écrit :

tu te calmes s'il te plait  
 [:shakalagoons]  
 
 
ca c'est toi qui le dit :D
et la charte dis le contraire :o
 
Et je ne trouve pas qu'il ait utilisé de ton pédant (contrairement à toi, d'ailleur, cf ci-dessus).


pardon monsieur le modo, et merci de votre grande mansuétude  :love:  
 

n°1046328
the real m​oins moins
Posté le 13-04-2005 à 17:39:03  profilanswer
 

c'est bon, on a la paix pour quelques minutes là, le temps qu'il trouve un dico [:albator]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1046353
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 17:47:14  profilanswer
 

the real moins moins a écrit :

c'est bon, on a la paix pour quelques minutes là, le temps qu'il trouve un dico [:albator]


pour pédant ou mansuétude? [:icon7]
 

n°1046356
schnapsman​n
Zaford Beeblefect
Posté le 13-04-2005 à 17:48:06  profilanswer
 

et puis merde les insultes barrées, ça compte pas [:mmmfff]

n°1049998
Chronoklaz​m
Posté le 17-04-2005 à 01:21:30  profilanswer
 

Bon voila j'ai une autre question .
 
J'ai une classe Valeur que je parametre avec E ; Valeur<E>
 
J'ai aussi une classe Environnement que je voudrais parametrer avec Valeur ; Environnement<Valeur>
 
Mais dans cette classe Envirennement je vais devoir me servir de E, donc a priori en ecrivant Environnement<E> ca devrait aller... mais ca ne va pas car je vais avoir un environnement dont les valeurs seront tous de type E. Je vodrais pouvoir y mettre la definition d'une fonction, une valeur numerique (Integer, Double) une valeur Symbolique ...  
 
Seulement voila je n'ai apparament pa le droit de declarer  
la classe Environnement avec 2 parametres emboités ;  
 

Code :
  1. public class Environnement<Valeur<E>>{}


 
Donc je laisse simplement E ... et en instanciant la classe Environnement je ne peux pas mettre autre chose que le joker (?)
 
Et là c'est pas marrant du tout car quand j'essai d'ajouter une valeur dans mon environnement :
 

Code :
  1. Environnement<?> e1 = new Environnement();
  2.    
  3.     e1.addValeur("x", new Integer(4));


 
J'obtiens :

Citation :


C:\... Java\Projet\src\Main.java:20: addValeur(java.lang.String,capture of ?) in fr.unice.memoire.Environnement<capture of ?> cannot be applied to (java.lang.String,java.lang.Integer)


 
Au secours  [:chronoklazm]


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1051541
nraynaud
lol
Posté le 18-04-2005 à 23:17:17  profilanswer
 

Chronoklazm a écrit :


Code :
  1. Environnement<?> e1 = new Environnement();
  2.    
  3.     e1.addValeur("x", new Integer(4));


 
J'obtiens :

Citation :


C:\... Java\Projet\src\Main.java:20: addValeur(java.lang.String,capture of ?) in fr.unice.memoire.Environnement<capture of ?> cannot be applied to (java.lang.String,java.lang.Integer)


 
Au secours  [:chronoklazm]


je peux voir la définition de addValeur stp ?
cependant, il est évident ici que tu dois écrire  

Code :
  1. Environnement<Integer> e1 = new Environnement();
  2.    
  3.     e1.addValeur("x", new Integer(4));


puisque l'utilisation est dans le même bloc de code que la déclaration de e1

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
brochettes de petites questions[Scheme] Questions de noob'
Javascript: deux p'tites questions[VC++] Généricité
Diverses questions de codage [Débutant]Questions de noob sur le html.
Débutant : questions C/C++quelques questions pour un site
[C/C++] Lecture de structures en C++ ? Nouvelles questions >[Projet jeu JAVA] Questions de débutant
Plus de sujets relatifs à : Questions sur la généricité.


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)