2009-07-17 9 views
4

Lors de la programmation avec C/C++ ou Python, j'avais parfois un dictionnaire avec des références aux fonctions selon les clés spécifiées. Cependant, je ne sais pas vraiment comment avoir le même comportement - ou à tout le moins similaire - en Java me permettant dynamique l'association de fonction-clé (ou méthode, en Java argot).Quel est le moyen le plus pratique d'avoir des "fonctions dans un dictionnaire" en Java?

En outre, j'ai trouvé la technique HashMap que quelqu'un a suggéré, mais est-ce sérieusement le meilleur et le plus élégant? Je veux dire, il semble que beaucoup de créer une nouvelle classe pour chaque méthode que je veux utiliser.

J'apprécierais vraiment chaque contribution à ce sujet.

+0

En quoi un HashMap est-il différent d'un dictionnaire? – Draemon

Répondre

10

Vous n'avez pas besoin de créer une classe de noms complète pour chaque action. Vous pouvez utiliser les classes internes anonymes:

public interface Action<T> 
{ 
    void execute(T item); 
} 

private static Map<String, Action<Foo>> getActions() 
{ 
    Action<Foo> firstAction = new Action<Foo>() { 
     @Override public void execute(Foo item) { 
      // Insert implementation here 
     } 
    }; 
    Action<Foo> secondAction = new Action<Foo>() { 
     @Override public void execute(Foo item) { 
      // Insert implementation here 
     } 
    }; 
    Action<Foo> thirdAction = new Action<Foo>() { 
     @Override public void execute(Foo item) { 
      // Insert implementation here 
     } 
    }; 
    Map<String, Action<Foo>> actions = new HashMap<String, Action<Foo>>(); 
    actions.put("first", firstAction); 
    actions.put("second", secondAction); 
    actions.put("third", thirdAction); 
    return actions; 
} 

(magasin, puis dans une variable statique.)

Ok, donc il est loin d'être aussi pratique comme une expression lambda, mais ce n'est pas trop mauvais.

+3

Exécuter doit être exécuté, comme les conventions de nommage Java recommande – dfa

+0

@dfa: Cheers - c'est ce que j'ai pour mélanger un nom de délégué .NET avec une interface Java :) –

1

La réponse courte est que vous devez enrober chaque méthode dans une classe - appelée un foncteur.

+1

Apache Commons Functor existe pour fournir ceci en Java - http://commons.apache.org/sandbox/functor/. Trucs que dans votre HashMap :) – Jon

Questions connexes