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

  FORUM HardWare.fr
  Programmation
  Java

  constructeur d'un type générique [Résolu : pas possible]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

constructeur d'un type générique [Résolu : pas possible]

n°928081
bobuse
Posté le 20-12-2004 à 14:36:58  profilanswer
 

:hello:
 
Voilà mon problème, je commence à faire joujou avec les generics, et c'est franchment bougrement pratique, mais je coince :/
 
Voilà mes classes bidons :
 
Vehicule :

public class Vehicule {
 public Vehicule() {
  System.out.println("nouveau véhicule" );
 }
 public void rouler() {
  System.out.println("Vehicule : roule" );
 }
}


 
Voiture :

public class Voiture extends Vehicule {
 public Voiture() {
     super();
  System.out.println("nouvelle voiture" );
 }
 public void demarrer() {
  System.out.println("Vroum" );
 }
}


 
Velo :

public class Velo extends Vehicule {
 public Velo() {
     super();
  System.out.println("nouveau vélo" );
 }
}


 
là où j'ai un bleme :
Personne :

Code :
  1. public class Personne<V extends Vehicule> {
  2. public V vehicule;
  3. public Personne() {
  4.     // la ligne suivante passe pas
  5.  //vehicule = new V();
  6. }
  7. }


 
Ma classe principale :

public class TestGenerics {
 
 public static void main(String[] args) {
  Personne<Velo> p2=new Personne<Velo>();
  Personne<Voiture> p3=new Personne<Voiture>();
  p3.vehicule.demarrer();
 }
}


 
Bien sûr ça me sort un NullPointerException :D!
 
Si j'ajoute

p3.vehicule=new Voiture();

, là ça marche bien, mais bon l'intérêt est moyen :/
J'aurai aimé instancié le type paramétré V dans la classe Personne, mais ça bloque :/
 
Quelqu'un a une idée de comment ça marche ?


Message édité par bobuse le 21-12-2004 à 09:22:12
mood
Publicité
Posté le 20-12-2004 à 14:36:58  profilanswer
 

n°928089
bobuse
Posté le 20-12-2004 à 14:44:37  profilanswer
 

J'ai trouvé un topic sur java forums qui a l'air de traiter des même trucs, ça n'a pas l'air trivial ... :/
http://forum.java.sun.com/thread.j [...] &tstart=15

n°928099
benou
Posté le 20-12-2004 à 14:56:36  profilanswer
 

ca me parait logique que ca marche pas : tu ne peux pas savoir si ton type générique a un constructeur vide => tu ne peux pas construire d'objet de ton type générique ... à vérifier, mais ca me parait assez évident. Sans dire que si ca se trouve, c'est une interface ce type ...
 
faut le passer en paramètre dans le constructeur ...


---------------
ma vie, mon oeuvre - HomePlayer
n°928100
chrisbk
-
Posté le 20-12-2004 à 14:57:19  profilanswer
 

benou a écrit :

ca me parait logique que ca marche pas : tu ne peux pas savoir si ton type générique a un constructeur vide => tu ne peux pas construire d'objet de ton type générique ... à vérifier, mais ca me parait assez évident. Sans dire que si ca se trouve, c'est une interface ce type ...
 
faut le passer en paramètre dans le constructeur ...


 
 
c'est un peu concon, non ?
pourrait pas lever une exception au runtime ? Voir meme a la compilation verifier si le code est valide ?


Message édité par chrisbk le 20-12-2004 à 14:57:44
n°928109
benou
Posté le 20-12-2004 à 15:02:33  profilanswer
 

chrisbk a écrit :

c'est un peu concon, non ?


je trouve pas
 

chrisbk a écrit :

pourrait pas lever une exception au runtime ?


si mais bon, tu trouverais ca bien toi ? sans dire qu'elle serait imprédictible ...
 

chrisbk a écrit :


Voir meme a la compilation verifier si le code est valide ?


bha non, c'est pas dans le schema de compile de vérifier que l'intérieur des méthode des classes utilisés pas de "code interdit" ...
 
pense simplement au cas où le type générique est typé avec une interface : ca aurait aucun sens. C'est pas comme ca qu'il faut se servir des geneic c'est tout [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
n°928112
chrisbk
-
Posté le 20-12-2004 à 15:04:31  profilanswer
 

benou a écrit :

je trouve pas


 
bin je trouve que ca restreint le champ d'application
 
 
 

Citation :

bha non, c'est pas dans le schema de compile de vérifier que l'intérieur des méthode des classes utilisés pas de "code interdit" ...


 
bin il verifie bien l'heritage du type generique, pourquoi il verifierait pas les fonctions & cie ?
 
 

Citation :

pense simplement au cas où le type générique est typé avec une interface : ca aurait aucun sens. C'est pas comme ca qu'il faut se servir des geneic c'est tout [:spamafote]


 
habitude du c++....

n°928114
benou
Posté le 20-12-2004 à 15:07:09  profilanswer
 

chrisbk a écrit :

bin il verifie bien l'heritage du type generique, pourquoi il verifierait pas les fonctions & cie ?


parce que il s'appuit sur la signature des classes, pas sur leur contenu ...  
 

chrisbk a écrit :

habitude du c++....


mauvaise habitude, changer habitude


---------------
ma vie, mon oeuvre - HomePlayer
n°928116
chrisbk
-
Posté le 20-12-2004 à 15:09:54  profilanswer
 

Citation :

parce que il s'appuit sur la signature des classes, pas sur leur contenu ...


 
d'accord, et en ton ame et conscience, tu trouves pas ca un peu dommage ?

benou a écrit :


mauvaise habitude, changer habitude


 
heuh je pense pas non, de ce coté la le C++ offre un certains nombre d'avantage en terme de reduction de taille de code et autre. Il lui manque les contraintes sur les types (genre machin derive de paul), mais pour d'autre truc il enfonce bien java (et le futur c#). C'est pas forcement toujours sexy, comme code, mais c'est foutrement puissant.


Message édité par chrisbk le 20-12-2004 à 15:10:37
n°928117
bobuse
Posté le 20-12-2004 à 15:09:57  profilanswer
 

benou> Je suis d'accord avec toi avec le risque d'avoir une interface, mais puisque que mon type paramétré hérite d'une classe, une vraie, on pourrait se dire que ... mouaif je sais pas

n°928118
chrisbk
-
Posté le 20-12-2004 à 15:11:19  profilanswer
 

bobuse a écrit :

benou> Je suis d'accord avec toi avec le risque d'avoir une interface, mais puisque que mon type paramétré hérite d'une classe, une vraie, on pourrait se dire que ... mouaif je sais pas


 
 
on peut rien se dire du tout, il peut pas savoir a la compil (ou plutot il cherche pas a savoir) que l'objet que tu lui donne en param possede bien un constructeur sans parametres, donc il boude.

mood
Publicité
Posté le 20-12-2004 à 15:11:19  profilanswer
 

n°928122
benou
Posté le 20-12-2004 à 15:15:15  profilanswer
 

chrisbk a écrit :


d'accord, et en ton ame et conscience, tu trouves pas ca un peu dommage ?
 
heuh je pense pas non, de ce coté la le C++ offre un certains nombre d'avantage en terme de reduction de taille de code et autre. Il lui manque les contraintes sur les types (genre machin derive de paul), mais pour d'autre truc il enfonce bien java (et le futur c#). C'est pas forcement toujours sexy, comme code, mais c'est foutrement puissant.


bha comme toujours en java, c'est va moins loin que le C++ mais c'est plus simple.
 
on peut se dire que c'est dommage, etc ... moi je préfère voir comment utiliser le truc plutot que de m'imaginer comment ca aurait pu être...
Je me dis aussi que des tas de gens plus inteligents que moi ont fait le truc comme ca en connaissance de cause ...
 
faut dire aussi que je connais assez mal le C++ => j'ai pas vraiment de point de comparaison [:skeye]


---------------
ma vie, mon oeuvre - HomePlayer
n°928128
chrisbk
-
Posté le 20-12-2004 à 15:18:22  profilanswer
 

benou a écrit :

bha comme toujours en java, c'est va moins loin que le C++ mais c'est plus simple.


 
a ce propos, y'en a qui rale parce que la syntaxe de java 1.5 est devenue toute laide (le foreach craignos, le @interface caca), t'en pense quoi ? [:joce] c'est dommage de passer d'un langage super verbeux (class prout extends roger implements paul) a un truc horrible (for(prout : pomme)), quand meme...
 
 

Citation :

faut dire aussi que je connais assez mal le C++ => j'ai pas vraiment de point de comparaison [:skeye]


 
les templates en C++ portent bien leur nom : ca te fais de gros bloc de code qui seront dupliqués a la compilation suivant les params que tu leur file. Ca ressemble pas exactement a la methode java, mais c'est diablement efficace.
 
 

n°928135
benou
Posté le 20-12-2004 à 15:24:07  profilanswer
 

chrisbk a écrit :

a ce propos, y'en a qui rale parce que la syntaxe de java 1.5 est devenue toute laide (le foreach craignos, le @interface caca), t'en pense quoi ? [:joce] c'est dommage de passer d'un langage super verbeux (class prout extends roger implements paul) a un truc horrible (for(prout : pomme)), quand meme...


je me suis aps encore amusé à tester les nouveauté du jdk1.5. pour tout dire, au boulot j'en suis encore au jdk1.3 :/
 
Mais c'est clair que dès le début, j'ai eu un peu peur que la "facilité" de codage du java soit un peu ébranlé à cause de ses nouveautés ... on verra avec le temps ... mais rien que la nouvelle geule de la javadoc des types génériques me plait pas du tout par exemple ...
 

chrisbk a écrit :


les templates en C++ portent bien leur nom : ca te fais de gros bloc de code qui seront dupliqués a la compilation suivant les params que tu leur file. Ca ressemble pas exactement a la methode java, mais c'est diablement efficace.


ouais ca je savait mais c'est totu ce que je savais :)
je l'ai jamais trop vu utilisé, et je l'ai jamais fait moi même => je peux pas mesurer l'utilité du truc. je sais juste que ca permet de faire bcp de choses, comme un peu tout en C++ : tu peux totu faire, mais c'est la merde à comprendre.
 
edit : à quand un inner-marequote ??


Message édité par benou le 20-12-2004 à 15:25:06

---------------
ma vie, mon oeuvre - HomePlayer
n°928144
bobuse
Posté le 20-12-2004 à 15:31:21  profilanswer
 

chrisbk a écrit :

a ce propos, y'en a qui rale parce que la syntaxe de java 1.5 est devenue toute laide (le foreach craignos, le @interface caca), t'en pense quoi ? [:joce] c'est dommage de passer d'un langage super verbeux (class prout extends roger implements paul) a un truc horrible (for(prout : pomme)), quand meme...


 
Perso, pour l'instant ça me parait super séduisant de plus avoir recastage de partout grâce au templates, c'est pour ça que j'essaie de bien comprendre comment ça marche, mais c'est vrai que plus j'apprends plus je me dis que ça n'a pas grand chose à voir avec le C++, à part la syntaxe ;)

n°928157
chrisbk
-
Posté le 20-12-2004 à 15:38:24  profilanswer
 

bobuse a écrit :

Perso, pour l'instant ça me parait super séduisant de plus avoir recastage de partout grâce au templates


 
 
ca, c'est pas du luxe, parce que les liste de "object", beurf beurf

n°928160
benou
Posté le 20-12-2004 à 15:38:48  profilanswer
 

bobuse a écrit :

plus j'apprends plus je me dis que ça n'a pas grand chose à voir avec le C++, à part la syntaxe ;)


 
ca on avait été prévenu dès le début ...


Message édité par benou le 20-12-2004 à 15:39:19

---------------
ma vie, mon oeuvre - HomePlayer
n°928161
chrisbk
-
Posté le 20-12-2004 à 15:39:35  profilanswer
 

non rien [:joce]


Message édité par chrisbk le 20-12-2004 à 15:39:48
n°928163
benou
Posté le 20-12-2004 à 15:39:55  profilanswer
 

chrisbk a écrit :

tu reponds a qui la ?


edited :o
t'as posté trop vite ;)
 
edit : trop tard [:joce]


Message édité par benou le 20-12-2004 à 15:40:25

---------------
ma vie, mon oeuvre - HomePlayer
n°928164
chrisbk
-
Posté le 20-12-2004 à 15:40:11  profilanswer
 

pareil pour toi [:ddr555]

n°928172
benou
Posté le 20-12-2004 à 15:42:56  profilanswer
 

chrisbk a écrit :

pareil pour toi [:ddr555]


ouais mais moi je t'ai [:quoted] ta tête :na:


---------------
ma vie, mon oeuvre - HomePlayer
n°928827
bobuse
Posté le 21-12-2004 à 09:21:52  profilanswer
 

Bon, pour clore ce sujet, voilà la réponse expliquée sur la FAQ de Bruce Eckel :
http://www.langer.camelot.de/Gener [...] rameter%3F
 
Conclusion : j'ai encore beaucoup à apprendre des nouvelles features de Tiger :)
Prochaine étape, les meta-tags :)

n°928985
benou
Posté le 21-12-2004 à 11:11:49  profilanswer
 

c'est plutot la faq d'angelika :o
Elle dis exactement la même chose que moi ... tu crois plus angelika que moi :'(


---------------
ma vie, mon oeuvre - HomePlayer
n°929174
bobuse
Posté le 21-12-2004 à 14:18:06  profilanswer
 

benou a écrit :

c'est plutot la faq d'angelika :o


oups :D m'a trompé
EDIT : en fait c'est parce que je suis tombé sur cette FAQ à partir des tuts de Eckel :
http://www.mindview.net/WebLog/log-0061

benou a écrit :


Elle dis exactement la même chose que moi ... tu crois plus angelika que moi :'(


Meuh non, mais en plus il y a un exemple, et puis c'est en anglais, ça fait plus sérieux ;)
Tu avais raison depuis le début, mais cette FAQ m'a permis de mieux comprendre :)


Message édité par bobuse le 21-12-2004 à 14:20:20
n°929176
chrisbk
-
Posté le 21-12-2004 à 14:22:55  profilanswer
 

ste vieille magouille a la reflexion :o

n°929180
bobuse
Posté le 21-12-2004 à 14:27:58  profilanswer
 

Voilà ce que ça donne :D
Mais c'est clair que c'est magouillé [:ooooo]

Code :
  1. public class Personne<V extends Object> {
  2. public V vehicule;
  3. public Personne(Class<V> vClass) {
  4.     try {
  5.             vehicule=(V)vClass.newInstance();
  6.         } catch (InstantiationException e) {
  7.             // TODO Auto-generated catch block
  8.             e.printStackTrace();
  9.         } catch (IllegalAccessException e) {
  10.             // TODO Auto-generated catch block
  11.             e.printStackTrace();
  12.         }
  13. }
  14. }


Reste plus qu'à traiter les exception :whistle:
 
Et mon main bidon devient :

Code :
  1. public static void main(String[] args) {
  2.     Personne<Velo> p2=new Personne<Velo>(Velo.class);
  3.  Personne<Voiture> p3=new Personne<Voiture>(Voiture.class);
  4.  p3.vehicule.demarrer();
  5. }


Message édité par bobuse le 21-12-2004 à 14:28:21
n°929184
benou
Posté le 21-12-2004 à 14:31:59  profilanswer
 

c'est trop naze le coup du Class et newInstance !
passe lui son véhicule en paramètre du constructeur !


Message édité par benou le 21-12-2004 à 14:32:25

---------------
ma vie, mon oeuvre - HomePlayer
n°929188
bobuse
Posté le 21-12-2004 à 14:35:47  profilanswer
 

benou a écrit :

c'est trop naze le coup du Class et newInstance !
passe lui son véhicule en paramètre du constructeur !


Mouaif ça me gène un peu quand même :/
C'est plus encapsulée à 100% ... tu vois ce que je veux dire.
 
Je trouvais ça pas mal, d'avoir une classe qui gère son paramétrage comme un grande, qui instancie ses attributs paramétrés, et s'autogère comme une grande ... mais bon, peut-être que je me goure ...

n°929191
bobuse
Posté le 21-12-2004 à 14:38:53  profilanswer
 

EDIT : ne pas lire ce message :o
Et puis c'est pas du tout redondant :

Code :
  1. Personne<Voiture> p3=new Personne<Voiture>(new Voiture());


Message édité par bobuse le 21-12-2004 à 14:54:29
n°929199
benou
Posté le 21-12-2004 à 14:43:50  profilanswer
 

pas plus qu'avec un Voiture.class [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
n°929202
bobuse
Posté le 21-12-2004 à 14:46:36  profilanswer
 

benou a écrit :

pas plus qu'avec un Voiture.class [:spamafote]


[:neowen]
 
bon en fait, on n'est pas obligé de mettre le deuxième <Voiture>, car il est déduit, même si eclipse met des beaux warnings en jaunes :o :

Code :
  1. Personne<Voiture> p3=new Personne(new Voiture());


Message édité par bobuse le 21-12-2004 à 14:52:41
n°929297
benou
Posté le 21-12-2004 à 16:03:45  profilanswer
 

ha tiens, je savais pas ca ... :gratgrat:


---------------
ma vie, mon oeuvre - HomePlayer
n°929643
veryfree
Posté le 22-12-2004 à 00:12:10  profilanswer
 

je suis le seul a trouver ca indigeste [:le kneu]

n°929646
the real m​oins moins
Posté le 22-12-2004 à 00:14:22  profilanswer
 

c'est comme les endives, on y prend gout.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°935763
bobuse
Posté le 03-01-2005 à 15:05:35  profilanswer
 

veryfree a écrit :

je suis le seul a trouver ca indigeste [:le kneu]


franchement lis le tut de sun en entier : http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
 
et tu verras que c'est bougrement intéressant, et peut rendre une librairie beaucoup plus lisible !

n°936578
veryfree
Posté le 04-01-2005 à 13:35:51  profilanswer
 

j'imprime ca merci ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  constructeur d'un type générique [Résolu : pas possible]

 

Sujets relatifs
[resolu] focus sur JFrame[RESOLU] Precision d'un float à l'affichage
[résolu][C++]Passage de paramètres au constructeur d'une classe mèrePassage texte brut en XHTML [Résolu]
insérer du php dans une page html resoluprobleme avec type date et heure
[Pb] Mysql 4.0.18 et socket TCP sous Linux Debian Sarge [RESOLU][VBA Excel] [Résolu] Problème de librairies de fonctions vba
[[MS Visual C++ 6.0] Il ne link plus lors de la compilation [Résolu] 
Plus de sujets relatifs à : constructeur d'un type générique [Résolu : pas possible]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR