Какой самый практичный способ иметь «функции в словаре» в Java? - PullRequest
4 голосов
/ 17 июля 2009

При программировании на C / C ++ или Python я иногда использовал словарь со ссылками на функции в соответствии с указанными ключами. Тем не менее, я не знаю, как иметь такое же - или, по крайней мере, похожее - поведение в Java, позволяющее мне динамический ключ-функция (или метод в сленге Java). *

Кроме того, я нашел метод HashMap, который кто-то предложил, но действительно ли это лучший и самый элегантный способ? Я имею в виду, что создание нового класса для каждого метода, который я хочу использовать, выглядит много.

Я бы очень признателен за каждый вклад в это.

Ответы [ 2 ]

10 голосов
/ 17 июля 2009

Вам не нужно создавать полное имя класса для каждого действия. Вы можете использовать анонимные внутренние классы:

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;
}

(затем сохраните его в статической переменной.)

Хорошо, так что это не так удобно, как лямбда-выражение, но это не слишком плохо.

1 голос
/ 17 июля 2009

Короткий ответ: вам нужно обернуть каждый метод в классе, называемый функтором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...