Die Grenzen von HashMap

Hi an Alle.

Ich bins und hab mal wieder eine Frage.
Ich bin gerade eben dabei ein Progrämmchen für eine Simulation zu schreiben und ich bin dabei auf einen Ansatz gekommen, den ich noch nicht sicher weiss, ob es überhaupt geht.

Meine Frage, kurz und knapp,
können Methodenaufrufe (oder gar ganze Methoden) in einer HashMap hinterlegt werden und beim entsprechenden Aufruf innerhalb der HashMap dann verwendet werden?

Wie immer danke ich euch im Vorraus.

Bis bald

Moien

können Methodenaufrufe (oder gar ganze Methoden) in einer
HashMap hinterlegt werden

Ja. Das geht über java.lang.reflect.Method Objekte.

und beim entsprechenden Aufruf
innerhalb der HashMap dann verwendet werden?

Wieso innerhalb der HashMap? Die HashMap selbst tut (fast) nix mit den Objekten. Der externe Code kann sie aber aufrufen.

Allerdings ist so ein Construkt nicht wirklich schnell. java.lang.reflect.Method ist eher zum debuggen gedacht.

cu

Hallo,
Wenn ich Dich richtig verstehe, willst Du eher Funktionale Programmierung betreiben: http://de.wikipedia.org/wiki/Funktionale_Programmierung

Das ist aber mit Java nicht möglich. Scala wäre mein Tip.

Viele Grüsse
Simon

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.