Wie lassen sich Methodenaufrufe zur Laufzeit dynamisch ausführen?
Im Beispiel werden zehn Methoden deklariert, die jeweils einen kurzen Text ausgeben. Ein Teil dieses Textes wird als Parameter an die Methoden übergeben, um diesen Aspekt zu demonstrieren.
import java.beans.Statement;
import java.util.ArrayList;
public class DynamischeMethodenClass {
public static void methodeEins(String name) {
System.out.println("Ein Männername: " + name);
}
public static void methodeZwei(String name) {
System.out.println("Ein Frauenname: " + name);
}
public static void methodeDrei(String name) {
System.out.println("Ein Tier: " + name);
}
public static void methodeVier(String name) {
System.out.println("Eine Pflanze: " + name);
}
public static void methodeFuenf(String name) {
System.out.println("Ein Gebirge: " + name);
}
public static void methodeSechs(String name) {
System.out.println("Eine Stadt: " + name);
}
public static void methodeSieben(String name) {
System.out.println("Ein Bundesland: " + name);
}
public static void methodeAcht(String name) {
System.out.println("Ein Land: " + name);
}
public static void methodeNeun(String name) {
System.out.println("Eine Speise: " + name);
}
public static void methodeZehn(String name) {
System.out.println("Ein Getränk: " + name);
}
private void fuehreAus() {
ArrayList list = new ArrayList(0);
list.add("methodeEins");
list.add(new Object[] { "Karl" });
list.add("methodeZwei");
list.add(new Object[] { "Hanna" });
list.add("methodeDrei");
list.add(new Object[] { "Flusspferd" });
list.add("methodeVier");
list.add(new Object[] { "Primel" });
list.add("methodeFuenf");
list.add(new Object[] { "Himalaya" });
list.add("methodeSechs");
list.add(new Object[] { "Berlin" });
list.add("methodeSieben");
list.add(new Object[] { "Sachsen" });
list.add("methodeAcht");
list.add(new Object[] { "Deutschland" });
list.add("methodeNeun");
list.add(new Object[] { "Nudeln" });
list.add("methodeZehn");
list.add(new Object[] { "Bier" });
int n = (int) (Math.random() * 20);
if(n % 2 != 0) n = n-1;
final Statement exp = new Statement(this, (String) list.get(n), (Object[]) list.get(n + 1));
try {
exp.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
DynamischeMethodenClass dmc = new DynamischeMethodenClass();
dmc.fuehreAus();
}
}
Zunächst werden der Name der Methoden als String
und deren Argumente in einem Object[]
-Array jeweils
nacheinander in einer ArrayList gespeichert. Die Methodennamen
besetzen somit die geraden Indizes der ArrayList, die Arrays mit
den Parametern jeweils die folgenden ungeraden.
Zur
Demonstration des Prinzips soll jeweils eine der deklarierten
Methoden (pseudo-)zufällig ausgewählt und ausgeführt werden. Der
jeweilige Index wird mit Hilfe der Klasse Math
und
deren Methode random()
erzeugt.
Ein Objekt
der Klasse Statement
wird mittels Übergabe dreier
Parameter gebildet:
- Ziel des Statements
- Methodenname als String
- Array der Methodenparameter
Ziel des Statements ist die aktuelle Klasse (dieser Parameter
darf nicht null
sein). Die anderen beiden Parameter
werden jeweils mit Hilfe des ermittelten Index aus der ArraList
der Methoden geladen.
Die Ausführung übernimmt die Statement
-Methode
execute()
. Sie kann bei Scheitern eine Exception
werfen, die abgefangen werden muss.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.