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

  FORUM HardWare.fr
  Programmation
  Java

  Implémentation type générique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Implémentation type générique

n°1821992
divx-boy
Posté le 04-12-2008 à 15:48:14  profilanswer
 

Bonjour, j'ai un petit souci avec l'implémentation d'un type générique.
 
J'ai un type générique "Chainon<T>" avec lequel j'ai réalisé, dans une autre classe, l'implémentation du type "ListeChainee<T>". Avec ce dernier type, j'implémente un type "Ensemble<T>". Il est maintenant demandé, après avoir codé toutes les méthodes de la classe Ensemble, de réaliser sous formes de fonctions, et non de méthodes, les opérations ensemblistes classiques (union, intersection, différence). Ces fonctions devront retourner des ensembles.
 
Question, je sais pas où placer le code de ces fonctions. Dans la classe listeChainee? Dans le programme annexe qui teste la classe?
 
 
 public static Ensemble<T> union ( Ensemble<T> EnsA, Ensemble<T> EnsB ) {
 /*
  * code
         */
 }
 
A chaque fois le problème porte sur <T>
 
Dans le premier cas :
erreur: cannot make a static reference to a non-static type
 
Dans le deuxieme cas:
erreur: T cannot be resolved to a type
 
 
Quelqu'un pourrait-il m'éclairer ?

mood
Publicité
Posté le 04-12-2008 à 15:48:14  profilanswer
 

n°1822023
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2008 à 16:10:45  profilanswer
 

J'aurais tendance à les mettre dans la classe Ensemble perso. Ou alors dans une classe statique "Ensembles" qui contient ces fonctions, mais bon...

 

Mais dans tous les cas, ton problème est dans la définition de ta méthode statique: il faut lui donner la valeur pour le type générique T, et pour ce faire il te faut ajouter un paramètre générique comme montré dans generic methods and constructors:

Code :
  1. public static <T> Ensemble<T> union ( Ensemble<T> EnsA, Ensemble<T> EnsB )


le <T> seul étant le paramètre générique pour ta méthode.

 

Ensuite à l'utilisation, tu peux fournir le type explicitement:

Code :
  1. Sets.<String>union(setA, setB)


ou alors laisser le compilo inférer le type (pour du code aussi simple, il est habituellement capable de se débrouiller):

Code :
  1. Sets.union(setA, setB)


Message édité par masklinn le 04-12-2008 à 16:11:27

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1822062
divx-boy
Posté le 04-12-2008 à 16:55:09  profilanswer
 

En fait, avec
      public static <T> Ensemble<T> union ( Ensemble<T> EnsA, Ensemble<T> EnsB )
 
que je rajoute donc dans ma classe ListeChainee, j'ai une nouvelle erreur pour les 3 derniers <T>:
 
Bound mismatch: The type T is not a valide substitute for the bounded parameter <T extends Comparable<T>> of the type Ensemble<T>
 
 
Je comprends pas, j'ai pas eu de problème dans des utilisation similaires des types génériques dans d'autres codes.

n°1822069
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2008 à 17:06:44  profilanswer
 

divx-boy a écrit :

que je rajoute donc dans ma classe ListeChainee


Pourquoi? :sweat:  
 
Quel est le rapport entre une union d'ensembles et une liste chainée? :sweat:  

divx-boy a écrit :

Bound mismatch: The type T is not a valide substitute for the bounded parameter <T extends Comparable<T>> of the type Ensemble<T>
 
Je comprends pas, j'ai pas eu de problème dans des utilisation similaires des types génériques dans d'autres codes.


Ensemble est défini comment?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1822072
divx-boy
Posté le 04-12-2008 à 17:09:34  profilanswer
 

Au temps pour moi je voulais parler de la classe "Ensemble" ;)
 
Et ensemble est défini comme ceci:
 

Citation :


public class Ensemble <T extends Comparable <T> > {
 
 /*
  * attributs de classe
  */
 private ListeChainee <T> Lens;
 
 
 public Ensemble() {
  Lens = new ListeChainee <T> ();
 }
 
/*
 * méthodes
 */
 
}

n°1822077
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2008 à 17:20:39  profilanswer
 

Ben c'est logique dans ce cas, il faut sûrement que le T de la méthode soit un sous-ensemble du T d'Ensemble, donc il faut probablement

Code :
  1. public static <T extends Comparable<T>> Ensemble<T> union ( Ensemble<T> EnsA, Ensemble<T> EnsB )


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1822087
divx-boy
Posté le 04-12-2008 à 17:29:55  profilanswer
 

Ca fonctionne !
 
Merci ;)


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

  Implémentation type générique

 

Sujets relatifs
Heritage et derivation de typeSTD type et polymorphisme.
Probleme conflit de type[NHibernate] Question sur le type des propriétés/colonnes
simple question de type de variableProblème insoluble de transtypage
[résolu] [PHP] Forcer le type d'une variableComment afficher un value dans un input de type file
[C#] Récuperer le type de base d'un System.NullableMailto content type envoyer au format HTML
Plus de sujets relatifs à : Implémentation type générique


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