[generics] un patron strategy paramétrable

un patron strategy paramétrable [generics] - Java - Programmation

Marsh Posté le 26-04-2005 à 12:20:01    

:hello:  
 
Je reviens avec mes generics :D
 
Cette fois-ci, je tente de faire un patron strategy  
Pour être plus clair, un genre de truc comme ça http://www.dofactory.com/Patterns/Diagrams/strategy.gif (décrit là)
 
Voilà ma classe abtraite Context qui possède une méthode qui fait appel à une stratégie qui peut changer dynamiquement :

Code :
  1. public abstract class Context <N extends Number> {
  2.  private Strategy < N , ? super Context<N> > strategy;
  3.  public void setStrategy(Strategy < N , ? super Context<N> > strategy) {
  4.  this.strategy = strategy;
  5. }
  6. // méthode qui utilise la stratégie
  7. public N call() throws Exception {
  8.  return this.strategy.call(this);
  9. }
  10. }


Et l'interface qui spécifie la stratégie :

Code :
  1. public interface Strategy < N extends Number , C extends Context<N> > {
  2. public abstract N call(C context);
  3. }


 
Mon problème est au moment du sous-typage. Voici comment je voudrai déclarer mon sous-type de Context :

Code :
  1. public class SomeObject extends Context<Integer> {
  2. public void changeStrategy(SomeStrategy strategy) {
  3.  // ERREUR
  4.  this.setStrategy(strategy);
  5. }
  6. }


et ma stratégie :

Code :
  1. public class SomeStrategy implements Strategy<Integer,SomeObject> {
  2. public Integer call(SomeObject context) {
  3.  return 0;
  4. }       
  5. }


 
Mais j'ai une erreur sur "this.setStrategy(strategy);", le compilo me sort :


The method setStrategy(Strategy<Integer,? super Context<Integer>> ) in the type Context<Integer> is not applicable for the arguments (SomeStrategy)


J'ai du mal à comprendre l'erreur :/ toujours est-il qu'avec une stratégie implémentée comme ça, tout passe :

Code :
  1. public class SomeStrategy implements Strategy<Integer,Context<Integer>> {
  2. public Integer call(Context<Integer> context) {
  3.  return 0;
  4. }       
  5. }


Mais du coup, je suis obligé de recaster mon objet Context en SomeObject :/
 
Quelqu'un(e) a une idée ? :)

Reply

Marsh Posté le 26-04-2005 à 12:20:01   

Reply

Marsh Posté le 28-04-2005 à 12:19:35    

up du jeudi  :hello:  
 
Si je suis pas clair dites-le :D


---------------
get amaroK plugin
Reply

Marsh Posté le 28-04-2005 à 12:34:54    

sisi c'est clair, mais j'ai pas le temps de me concentrer là-dessus au boulot, et le soir j'oublie.


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed