Refleksja
Udało mi się wdrożyć mechanizm refleksji. Jest to mechanizm dzięki któremu uruchomimy dowolną metodę nie z poziomu instancji obiektu, ale jako argument w postaci zwykłego ciągu znaków. Czyli podaję sobie tak, obiekt, nazwę metody, argumenty i to tyle. Jest to bardzo wygodny mechanizm, aczkolwiek nie tak prosty do wdrożenia. Tutaj pokazuję jeden ze sposobów jego wdrożenia. Ja mam trochę bardziej zautomatyzowaną wersję, bo podaję tylko parę rzeczy i gra gitara. No ale sobie można przerobić. Dobry mechanizm refleksji w necie jest bardzo trudno już znaleźć.
public void uruchom () {
try {
final String nazwa_metody = "pokaz";
Object [] argumenty = {"Siała baba mak"};
Class < ? > [ ] typy = { String.class };
Object obiekt = new JakasKlasa();
Class < ? > klasa = Class.forName( obiekt.getClass().getName() );
Method metoda = klasa.getDeclaredMethod( nazwa_metody, typy );
metoda.invoke( obiekt, argumenty );
} catch ( final Exception wyjatek ) {
System.err.println("Błąd wykonania refleksji.");
}
}
W tle piosenka Domino - Miłość jak wiatr.
Widać, że metoda jest w wyjątku, czyli w try - catch. Fajne to jest, no bo jak wywali błąd jakiś to sobie można na spokojnie dalej działać. Metodę można sobie wrzucić do klasy. I tak, klasę "JakasKlasa" sobie utworzyłem osobno, ma ona w sobie metodę "pokaz()", która przyjmuje określone parametry. Jak ktoś nie chce parametrów to wywala "typy" i "argumenty". Hula jak wiatr. Fajne to jest, bo można sobie wywoływać metody nie patrząc za bardzo na obiekty nawet.
Sobie uruchomiłem właśnie metody z tej klasy. Tutaj chodzi o to żeby taka metoda działała dla dowolnej klasy, argumentów, itd. Sprawdziłem, działa.