# funktion aus einem String aufrufen



## k4hvd (11. Okt 2004)

Hallo,
Ich bin neu bei Java daher scheint auch die frage möglicheweise etwas eigenartig :!: 

ich habe eine funktion mit dem namen "test", und ich habe auch den String s mit dem wert "test". nun wenn ich die funktion "test" aufrufen will schreibe ich normaleweise einfach "myclass.test". nun möchte ich aber die funktion mit dem namen der mein String enthält aufrufen :!:  :!:  Das heißt wenn s = "test1" then möchte ich die funktion mit dem namen "test1" aufrufen usw. 

kann mir da jemand helfen.

MfG


----------



## foobar (11. Okt 2004)

Guckst du hier http://www.java-forum.org/de/viewtopic.php?t=9256&highlight=dispatcher


----------



## k4hvd (11. Okt 2004)

sorry aber daraus werde ich nicht schlau. 
ich muss da trozdem alle 3 finktionen bzw. "Action"  definieren! 

```
dispatcher.addAction("action1", new Action(){   public void invoke(){   new MyClass().doSomething();  }});
```

aber ich möchte unabhängig davon die funktion aufrufen.


----------



## foobar (11. Okt 2004)

> sorry aber daraus werde ich nicht schlau.
> ich muss da trozdem alle 3 finktionen bzw. "Action" definieren!


Das lässt sich nicht vermeiden, egal ob du es mit Interfaces oder mit Relfection löst. Wie stellst du dir das vor? Soll die Virtual-Machine raten zu welcher Methode und zu welcher Klasse der String "test" gehört?


----------



## dotlens (11. Okt 2004)

in vb kann man Strings einfach in klassen umwandeln und so. vieleicht hat er das so gemeint


----------



## foobar (11. Okt 2004)

> in vb kann man Strings einfach in klassen umwandeln und so. vieleicht hat er das so gemeint


<flame>In VB gibt es auch den "Datentyp" Variant. Man sieht ja was dabei rauskommt</flame> ;-)


----------



## k4hvd (11. Okt 2004)

So meine ich das!  :lol:  :lol:


----------



## dotlens (11. Okt 2004)

um anzufangen hab ich das noch praktisch gefunden... *in schtz nehm*


----------



## foobar (11. Okt 2004)

Hier ist ein Beispiel mit der Reflection-Api, damit kannst du ein beliebiges Object erzeugen und davon eine beliebige Methode aufrufen:

```
package reflectiondemo;
import java.lang.reflect.*;
public class ReflectionDemo
{
	public static void main(String[] args)
	{
		String className     = "reflectiondemo.myClass";
		String methodName = "myMethod";
		try
		{
			Constructor con = Class.forName(className).getConstructor(new Class[]{});
			Object newObject = con.newInstance(new Object[]{});
			newObject.getClass().getMethod(methodName, new Class[]{}).invoke(newObject, new Object[]{});
		}
		catch (SecurityException e)
		{
			e.printStackTrace();
		}
		catch (NoSuchMethodException e)
		{
			e.printStackTrace();
		}
		catch (ClassNotFoundException e)
		{
			e.printStackTrace();
		} catch (IllegalArgumentException e)
		{
			e.printStackTrace();
		} catch (InstantiationException e)
		{
			e.printStackTrace();
		} catch (IllegalAccessException e)
		{
			e.printStackTrace();
		} catch (InvocationTargetException e)
		{
			e.printStackTrace();
		}
	}

}

class myClass
{
	private int value = 12345;
	
	public myClass()
	{
		super();
	}

	public void myMethod()
	{
		System.out.println("I am a method");
	}

	public int getValue()
	{
		return value;
	}

	public void setValue(int i)
	{
		value = i;
	}
}
```


----------



## k4hvd (11. Okt 2004)

Danke, genau das was ich gesucht habe :wink:


----------

