getMethod(), invoke() - problem ze zwracaną wartością przez metodę

0

Witajcie, oto mój kod:

package pl.pat;

interface I {
	int f(int i);
	void g();
}
package pl.pat;

public class Implementacja1 {
	public int kwadrat(int i) {
		return i*i;
	}
	
	public void halo() {
		System.out.println("Halo !!!");
	}
}
package pl.pat;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class UniwersalnyAdapter implements I {
	private Object implementacja;
	private Method metodaF, metodaG;
	
	public UniwersalnyAdapter(Object impl, String f, String g) {
		implementacja = impl;
		try {
			metodaF = implementacja.getClass().getMethod(f, new Class[] {int.class});
			metodaG = implementacja.getClass().getMethod(g, new Class[] {});
		} catch(NoSuchMethodException e) {
			System.out.println(e);
		}
	}
	
	public int f(int i) {
		try {
		Object o = metodaF.invoke(implementacja, new Object[] {new Integer(i)});
		return 234;
		} catch(Exception e) {
			System.out.println(e);
			return 123;
		}
	}
	
	public void g() {
		try {
		metodaG.invoke(implementacja, new Object[] {});
		} catch(IllegalAccessException e) {
			System.out.println(e);
		} catch(InvocationTargetException e) {
			System.out.println(e);
		}
	}
}
package pl.pat;

public class test {

	public static void main(String[] args) {
		I i = new UniwersalnyAdapter(new Implementacja1(), "kwadrat", "halo");
		i.g();
		System.out.println(i.f(12));

	}

}

Mam problem z tymi linijkami kodu:

		Object o = metodaF.invoke(implementacja, new Object[] {new Integer(i)});
		return 234;

Metoda f() zwraca wartość, a wiec jak się do niej odnieść? Znalazłem sposób, że powinienem zrobić następującą operację:

return (Integer)o.intValue();

Jednak wywala mi błąd o braku metody intValue().

Jak uzyskać zwracaną wartość przez funkcję w moim przypadku ? Dodam, że kod dotyczy wzorca adapter.
Pozdrawiam.

0

Musisz zrobić

((Integer)o).intValue()

Tzn zapomniałeś o jednym zagnieżdżeniu nawiasów. To co ty napisałeś rzutuje wynik metody intValue() na Integer, a nie sam obiekt o.

0
Wibowit napisał(a):

Musisz zrobić

((Integer)o).intValue()

Tzn zapomniałeś o jednym zagnieżdżeniu nawiasów. To co ty napisałeś rzutuje wynik metody intValue() na Integer, a nie sam obiekt o.

Faktycznie nie zauważyłem tego, dzięki ;-)

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