Wovon du redetst, sind closures. Also code blöcke die zur laufzeit referenziert werden. So etwas unterstützt java nicht. Dennoch ist es möglich dieses Verhalten zu implementieren, und zwar durch Runnables.
Also für jede funktion, die du ins hashmap legen wolltetst, legst stattdessen ein Objekt, welches das Interface Runnable implementiert. Das verhalten defenierst du in der run methode. Um nicht ständig neue files für die klassen zu erzeugen, kannst du anonyme klassen zur instanziierun benutzen. Das sieht dann pseudo code mäßig so aus
Map functions = new HashMap
Runnable test = new Runnable(){
@Override
public void run() {…}
};
functions.put(„test“ , test);
u.s.w
//functions call
functions.get(„test“).run();
Ist die übliche Art in Java. Der tip mit scala war übrigens nicht schlecht. Scala code wird zu Java byte code compiliert und wird auf jeder JVM laufen. Es ist aber nict so leicht sich gleich in eine funktionale sprache einuarbeiten.
Wenn dir die Lösung mit Runnables nicht ausreicht, würde ich es lieber mit JRuby (Ruby compiler für Java) oder Jython (Python compiler für Java) versuchen.
Ruby und Python sind beides dynamisch typisierte sprachen und Objectorientierte Sprachen, die closures unterstützen. Dort kannst einfach code blöcke in einen hash legen.