3 votes

Java - sélecteurs de méthodes ?

Je viens d'un environnement Objective-C. En Objective-C, vous pouvez stocker des références à des méthodes en utilisant @selector les variables, par exemple @selector(terminate) . Ensuite, il suffit d'"appliquer" ces sélecteurs sur les objets, ce qui exécute la méthode décrite par le sélecteur.

Maintenant, je dois programmer quelque chose en Java. Existe-t-il quelque chose de similaire en Java ? Ou une solution de contournement ?

EDIT : En gros, je suis en train de créer un programme CLI. Lorsque je lis les commandes, je dois faire correspondre les commandes à certaines méthodes. J'ai pensé à créer un dictionnaire associant une commande à un sélecteur de méthode.

4voto

Russ Hayward Points 3636

Rien de bien. La seule méthode qui vous permet de faire une chose similaire est la réflexion :

public class ReflectionExample {
    private static class A {
        public void foo() {
            System.out.println("fooing A now");
        }
    }

    public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException,
            IllegalAccessException, InvocationTargetException {
        Method method = A.class.getMethod("foo");
        method.invoke(new A());
    }
}

Et ensuite, vous ne pouvez appeler Method.invoke que sur un objet de la même classe (ou d'une sous-classe).

EDIT : Pour résoudre votre problème exact, je pense que le mieux est de créer une classe pour chaque commande. Chacune de ces classes peut implémenter une interface qui contiendra la méthode pour exécuter la commande et probablement aussi un getter String pour le nom de la commande. Vous pouvez ensuite remplir une collection avec des instances de commande.

Le seul danger de cette méthode est que vous ajoutez une nouvelle classe de commande et que vous oubliez de créer une instance de celle-ci. La meilleure méthode que j'ai trouvée pour éviter cela est d'utiliser une énumération avec un membre pour chaque commande. Pour créer les instances, vous pouvez itérer sur les valeurs de l'énumération et utiliser un switch case pour créer les instances. Certains IDE (comme Eclipse) peuvent générer un avertissement ou une erreur si une instance d'énumération n'est pas couverte par un switch - cela vous indiquera immédiatement si vous avez oublié de créer une instance de commande.

3voto

ayush Points 6352

Une classe interne anonyme comme aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X