Wywoływanie metod obiektu przy pomocy zmiennych.

0

Witam
Problem polega na tym, iż chciałbym wywoływać metody obiektu przy pomocy zmiennych np.

class Foo{

	public int FooMethod1(){
	.........
	}
	public int FooMethod2(){
	........
	}
	.......
	...
}
public class Bar{
	public void main(){
		String NazwaMetody = "FooMethod1";
		
		Foo obj = new Foo();
		
		obj.[NazwaMetody](); //wiem że w JavaScript wyglądało to mniej więcej tak
	}
}

Wiem że można wywołać metody klasy przy pomocy refleksji z java.lang.reflect ,
ale nie wiem jak wywołać metody konkretnego obiektu.
Z góry dziękuję za odpowiedź.

0

Jeśli wyodrębnisz już instancję java.lang.reflect.Method która cię interesuje, to w tej klasie jest taka metoda jak: invoke(Object obj, Object[] args)

Zakładając, że chcesz wywołać bezparametrową metodę foo przez refleksję na obiekcie bar. Robisz tak:

Method metoda = bar.getClass().getMethod("foo", null);
metoda.invoke(bar, null);

Lub ewentualnie w jednej linijce:

bar.getClass().getMethod("foo", null).invoke(bar, null);
0

Jestes pewien ze tam ma byc null a nie po prostu pusta tablica, wzglednie nic (metoda jest vararg)? Nie wiem czy z nullem dziala, ale na pewno jest brzydsze.

0

JavaDoc dla Class.getMethod:

The parameterTypes parameter is an array of Class objects that identify the method's formal parameter types, in declared order. If parameterTypes is null, it is treated as if it were an empty array.

JavaDoc dla Method.invoke:

If the number of formal parameters required by the underlying method is 0, the supplied args array may be of length 0 or null.

Po chwili:
Ahh, cały czas mam JavaDoca do wersji 1.4.2. W takim razie w Javie 5+ można pominąć te nulle, czyli wychodzi:

bar.getClass().getMethod("foo").invoke(bar);
0

No i piknie. A nie wiedzialem ze z nullami tez zadziala ;d

0

Dzięki wielkie, właśnie oto mi chodziło.

0

spróbuj z tą metodą invoke(Object obj, Object[] args)

1 użytkowników online, w tym zalogowanych: 0, gości: 1