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

  FORUM HardWare.fr
  Programmation
  Java

  methodes abstr avec des arguments generiques dans une classe abstr

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

methodes abstr avec des arguments generiques dans une classe abstr

n°1321860
thierry_b
Posté le 09-03-2006 à 14:48:57  profilanswer
 

Bonjour,
 
J'aimerais utiliser une classe abstraite, pour utilsier à l'interieur des méthodes abstraites, que je pourrai implémenter dans des classes qui hériteront de ma classe abstraites.
 
Mais dans ces méthodes, je souhaiterai utiliser des arguments génériques,  mais je n'y arrive pas.
 
J'ai essayé:
 
public abstract class AbstractSetoid {
    public abstract bool equal(<T> a, <T> b);
}
 
Mais il me met cela:
 
AbstractSetoid.java:2: illegal start of type
    public abstract bool equal(<T> a, <T> b);
                               ^
AbstractSetoid.java:2: < expected
    public abstract bool equal(<T> a, <T> b);
                                            ^
2 errors
 
Quelqu'un voit ce qu'il faudrait faire? On est forcément obligé de passer le paranètre générique à la classe?
 
Merci :-)
A+


Message édité par thierry_b le 09-03-2006 à 14:52:30
mood
Publicité
Posté le 09-03-2006 à 14:48:57  profilanswer
 

n°1321872
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 14:56:08  profilanswer
 

non, mais tu peux faire une opération générique, et réutilisiser le type générique comme paramêtre.
 
public abstract<T>  bool equal(T a, T b);  
 
http://www.informit.com/articles/a [...] Num=3&rl=1

n°1321920
thierry_b
Posté le 09-03-2006 à 15:34:33  profilanswer
 

Merci :-)
 
Je voulais savoir aussi, car d'après ce que j'ai lu , ce n'est pas possible, mais on ne peut pas avoir d'attribut déclaré comme type paramétré?
 
Et dans ce cas, la meilleur facon de contourner ce pb serait qque chsoe du genre:
 abstract <T> T element() ?
 
Merci.
A+
 

Message cité 1 fois
Message édité par thierry_b le 09-03-2006 à 15:40:25
n°1321936
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 15:48:04  profilanswer
 

thierry_b a écrit :


Je voulais savoir aussi, car d'après ce que j'ai lu , ce n'est pas possible, mais on ne peut pas avoir d'attribut déclaré comme type paramétré?


 
tu as lut ça ou ?
 

Code :
  1. public class A<T> {
  2. private T myAttribut;
  3. }

n°1321939
thierry_b
Posté le 09-03-2006 à 15:50:41  profilanswer
 

Re,
 
euh je voulais dire sans forcement declarer le type paramétré  au niveau de la classe, comme pour les méthodes, c'est aussi possible?
 
Merci :-)
A+

n°1321945
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 15:54:36  profilanswer
 

ah :o
 
Déclare le en Object dans ce cas ton attribut, mais c'est très très sale :o

n°1321955
thierry_b
Posté le 09-03-2006 à 16:14:56  profilanswer
 

Ha ok.
 
Et par exemple pour une eventuelle méthode élément qui prend rien en argument et qui renverrait un T, je voulais mettre qque chose de ce genre:
 
public abstract class AbstractSetoid {
public abstract T element();
}
 
et il m'a mis ca:
AbstractSetoid.java:5: cannot find symbol
symbol  : class T
location: class AbstractSetoid
    public abstract T element();
                    ^
1 error
 
et par contre, si je mets ceci:
public abstract <T> T element();
 
même si je n'ai pas d'argument de type T dans la méthode element, ca marche.
 
Comment ca se fait?
 
Et si après dans une classe abstraite qui hérite de ma 1ere classe abstraite, je fais ceci:
 
public abstract class AbstractSetoidWithOne extends AbstractSetoid {
 
    public abstract <T> T one();
     
    public <T> boolean is_one(T x) {
 return (this.equal(x,one()));
    }
 
    public <T> T element() {
 return this.one();
    }
}
 
Il n'st pas content...et il me dit ceci:
 
hierry@debian:~/Master/Projet/pstl26$ javac AbstractSetoidWithOne.java
AbstractSetoidWithOne.java:10: type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds T,java.lang.Object
        return this.one();
 
Merci
A+


Message édité par thierry_b le 09-03-2006 à 16:17:47
n°1322009
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 16:58:20  profilanswer
 

Là, il va falloir aller lire un peu ce que sont les générics de java, tu mélange le paramétrage et l'utilisation des types paramétrés :  
 
http://lroux.developpez.com/articl [...] age=page_5

n°1322018
thierry_b
Posté le 09-03-2006 à 17:14:28  profilanswer
 

Re,
 
Ben j'avais deja lu ca, mais ca me semble pas plus clair.
 
D'après ce que j'ai compris, le type que tu mets entre public et ta valeur de retour, sert à préciser le type exact à assigner à ton argument.
 
Mais je ne comprends tjs pas pkoi
 
public abstract T element() marche pas, mais  
public abstract <T> T element() marche :-(.
 
 
Merci :-)
A+
 

n°1322033
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 17:31:03  profilanswer
 

parce que dans le premier cas, tu ne définit pas ce qu'est T, alors que dans le second on sait que T est un template paramerter de m"thode générique.

mood
Publicité
Posté le 09-03-2006 à 17:31:03  profilanswer
 

n°1322040
thierry_b
Posté le 09-03-2006 à 17:39:58  profilanswer
 

Ha ok,
 
mais imaginons maintena,t que je veuille faire une classe abstraite qui hérite de la 1ère ou j'ecris deja ceci:
 
public abstract class AbstractSetoidWithOne extends AbstractSetoid {
 
    public abstract <T> T one();
     
    public <T> boolean is_one(T x) {
 return (this.equal(x,one()));
    }
 
Maintenant, comme elle hérite de la 1ere, je vais implémenter la méthode element, en lui faisant retourner this.one().
C'est censé marcher vu que one() retourne un élèment de type T et que dans ma 1ere classe, j'avais dit que element retournait un element de type T.
 
Pourquoi dans ce cas ni  
 
 public T element() {
 return this.one();
    }  
 
et ni:
 
 public <T> T element() {
 return this.one();
    }
 
ne marchent dans cette seconde classe?
 
Merci.
A+


Message édité par thierry_b le 09-03-2006 à 17:40:14
n°1322043
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 17:45:18  profilanswer
 

Juste une question, a ton avis, tu as combien de T différent (conceptuellement) dans ta classe telle que tu l'a écrit ?  
 

n°1322045
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 17:45:37  profilanswer
 

(je sens que je suis mur pour faire un apté ce soir)

n°1322047
thierry_b
Posté le 09-03-2006 à 17:48:58  profilanswer
 

Euh,  
j'aurai dit un..mais tel que tu poses la question, ca n'a pas l'air d'etre le cas lol.
 

n°1322142
thierry_b
Posté le 09-03-2006 à 20:18:28  profilanswer
 

Donc en gros, pas moyen d'implémenter ma fonction element() dans la classe qui hérite de la 1ere?
 
Merci
A+

n°1322151
kadreg
profil: Utilisateur
Posté le 09-03-2006 à 20:32:02  profilanswer
 

En fait, il y a effectivmeent pas UN , mais deux T différent. Un Type paramétrique est local à l'élément qui le défini. Par exemple tu avais défini deux méthodes génériques, mais on sent qu'entre les deux, c'est un peu le même T. Donc, il va falloir le migrer vers l'élément englobant : la classe.
 
Au final, tu dois obtenir un truc comme ça :  
 

Code :
  1. abstract class AbstractSetoid<T> {
  2. public abstract T element();
  3. }
  4. public class AbstractSetoidWithOne<T> extends AbstractSetoid<T> {
  5. public T element() {
  6.  return null;
  7. }
  8. }


 
Mais en fait, il y a une autre question à se poser :  
 
Pourquoi as-tuy besoin des génériques ?


Message édité par kadreg le 09-03-2006 à 20:32:35

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°1322152
thierry_b
Posté le 09-03-2006 à 20:33:34  profilanswer
 

Ok.
 
Merci :-)


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

  methodes abstr avec des arguments generiques dans une classe abstr

 

Sujets relatifs
Lancer un programme avec des arguments via IE...Lancer un programme VB avec des arguments sous VB 6
Passage d'arguments[C++ débutant] Où mettre des méthodes non membres ?
Matcher un nombre inconnu d'arguments[Résolu][PHP5] fonction qui liste les paramètres d'une méthode de classe
rattacher une classe Javascript à un élément HTMLprotected dans classe template
Probleme classe heritant vector : redéfinition erase()comment passer d un fichier d une classe a des fichiers d une classe?
Plus de sujets relatifs à : methodes abstr avec des arguments generiques dans une classe abstr


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