Mechanizm refleksji
Z Wikipedii
W informatyce mechanizm refleksji to proces, dzięki któremu program komputerowy może być modyfikowany w trakcie działania w sposób zależny od własnego kodu oraz od zachowania w trakcie wykonania. Paradygmat programowania ściśle związany z mechanizmem refleksji to programowanie refleksyjne.
Mechanizm ten jest częściej spotykany w językach wysokiego poziomu, zwykle opartych o maszynę wirtualną.
[edytuj] Przykłady
[edytuj] Java
Poniższy przykład w języku Java wykorzystuje pakiet java.lang.reflect.
// bez refleksji Foo foo = new Foo(); foo.hello();
// z refleksją Class cl = Class.forName("Foo"); Method method = cl.getMethod("hello", null); method.invoke(cl.newInstance(), null);
Oba fragmenty tworzą instancję klasy Foo
, następnie wywołują metodę hello()
tej klasy. Różnica polega na tym, że w pierwszym fragmencie nazwa klasy i metody są częścią kodu źródłowego, podczas gdy w drugim fragmencie możliwe jest przeniesienie ich do zmiennych, które są ustalane w czasie wykonania kodu. Z drugiej strony kod wykorzystujący refleksję jest mniej czytelny i nie pozwala na sprawdzenie poprawności składniowej i semantycznej w trakcie kompilacji.
Mechanizm refleksji pozwala także na zdobywanie informacji o klasach w trakcie wykonania programu. W poniższym przykładzie Klasa Main
sprawdza jaki jest typ zwracany przez metody klasy Bar
.
public class Bar { public String fun(Integer i) { return "00" + i + ", zglos sie!"; } }
import static java.lang.System.out; import java.lang.reflect.*; public class Main { public static void main(String[] args) throws Exception { String className = "Bar"; Class c = Class.forName(className); Method[] m = c.getDeclaredMethods(); for (int i=0;i<m.length;++i) { out.print("Klasa " + className + " ma metode '" + m[i].getName().toString() + "'"); out.println(" ktora zwraca wartosc typu " + m[i].getReturnType().toString()); } } }
[edytuj] Linki zewnętrzne
- Java. Obiekty refleksyjne - artykuł wyjaśniający co to są refleksje i jak się je stosuje w Javie