Mechanizm refleksji: Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
SieBot (dyskusja | edycje)
m →‎Przykłady: drobne techniczne, drobne redakcyjne
Linia 5:
 
== Przykłady ==
 
===Java===
 
Poniższy przykład w [[Java|języku Java]] wykorzystuje pakiet [http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/package-summary.html java.lang.reflect].
 
<source lang="java">
// bez refleksji
Foo foo = new Foo();
Linia 16 ⟶ 19:
Method method = cl.getMethod("hello", null);
method.invoke(cl.newInstance(), null);
</source>
 
Oba fragmenty tworzą instancję klasy <code>Foo</code>, następnie wywołują metodę <code>hello()</code> 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órektórych wartość ustalanejest ustalana 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 <code>Main</code> sprawdza jaki jest typ zwracany przez metody klasy <code>Bar</code>.
 
<pre>
<source lang="java">
public class Bar {
public String fun(Integer i) {
Linia 26 ⟶ 31:
}
}
</pre>
 
<pre>
import static java.lang.System.out;
import java.lang.reflect.*;
Linia 43 ⟶ 46:
}
}
</presource>
 
{{Język programowania stub}}