javapythonfunction

Java equivalent of function mapping in Python


In python, if I have a few functions that I would like to call based on an input, i can do this:

lookup = {'function1':function1, 'function2':function2, 'function3':function3}
lookup[input]()

That is I have a dictionary of function name mapped to the function, and call the function by a dictionary lookup.

How to do this in java?


Solution

  • There are several ways to approach this problem. Most of these were posted already:

    Personally I would use the Command approach. Commands combine well with Template Methods, allowing you to enforce certain patterns on all your command objects. Example:

    public abstract class Command {
      public final Object execute(Map<String, Object> args) {
        // do permission checking here or transaction management
        Object retval = doExecute(args);
        // do logging, cleanup, caching, etc here
        return retval;
      }
      // subclasses override this to do the real work
      protected abstract Object doExecute(Map<String, Object> args);
    }
    

    I would resort to reflection only when you need to use this kind of mapping for classes whose design you don't control, and for which it's not practical to make commands. For example, you couldn't expose the Java API in a command-shell by making commands for each method.