TheRom_S | Salut à tous,
j'ai découvert récemment les generics et leur puissance, mais j'en arrive à quelques problèmes.
En fait, j'ai des flux provenant d'un Socket à mapper sur différents types suivant mon cas d'utilisation :
un coup BufferedReader et String, un autre coup org.xml.sax.InputSource et org.jdom.Document, et après d'autres types encore ...
j'utilise un objet qui, pour gérer mes flux d'entrée, utilise lui-même d'autre objets paramétrables :
Code :
- // T1 par exemple BufferefReader
- // T2 par exemple String
- // T3 et T4, même style d'adaptation, mais en sortie
- public class MyController<T1, T2, T3, T4,
- T5 extends MyReader<T1, T2, ?>,
- T6 extends MyWriter<T3, T4, ?>> {
- // declaration révélante pour l'exemple
- T5 myReader;
- // opération appellée par un MyReader
- public boolean isReadable() { ... }
- // opération utilisant un MyReader
- public T2 read() { return this.myReader.read(); }
- }
- public class MyReader<T1, T2, C extends MonControlleur<T1, T2, ?, ?,
- ? extends MyReader<T1, T2, C>,
- ? extends MyWriter<?, ?, C>>> {
- // declaration révélante pour l'exemple
- C myController;
- public T2 read() {
- if (this.myController.isReadable()) { return ... ; }
- else { return null; } // par exemple
- }
- }
- public class MyWriter<T3, T4, C extends MonControlleur<?, ?, T3, T4,
- ? extends MyReader<?, ?, C>,
- ? extends MyWriter<T3, T4, C>>> { ... }
- // même chose
|
Ainsi, je peux vérifier 2 choses :
- grâce à la signature de MyController, je vérifie que le paramétrage de MyReader et MyWriter est bien dépendant des types T1 à T4
- grâce aux signatures de MyReader et MyWriter, que le MyController C passé est bien adapté aux types T1 à T4
Mes sources compilent sans aucun problème et sous NetBeans 5.0 beta, l'IDE ne me montrait aucune erreur.
Mais depuis que mon 5.0 beta est cassé (vivement la RC) je passe par Eclipse 3.1.1 qui me dit ceci pour MyReader (remplacer pour MyWriter) :
Citation :
Bound mismatch: The type ? extends MyReader<T1, T2, C> is not a valid substitute for the bounded parameter <T5 extends MyReader<T1, T2, ?>> of the type MyController<T1, T2, T3, T4, T5, T6>
|
Alors mes questions sont les suivantes :
- est-ce juste Eclipse qui gère pas ? après tout ça compile sans aucun [unchecked], rien, aucun warning (pour l'instant)
- est-ce que je vais trop loin dans la signature ?
exemple :
Code :
- public class ClassA<B extends ClassB<? extends ClassA<B extends ClassB<? extends ClassA<B extends ClassB<? extends ClassA<B extends ClassB<? extends ClassA<... // arf ou est-ce que je m'arrete ???
|
- même question à l'envers : ai-je vraiment besoin de spécifier un type T5 et T6 dans MyController et un type C dans les 2 autres ?
Donc j'espère ne pas trop vous torturer l'esprit avec mes questions et vous remercie d'avance pour vos réponses
ps: à quand le topic "passage obligé pour les débutants avec les generics" ? ---------------
The Rom's, à votre service
|