• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Refleksja w programowaniu Java, z czym to się je ?

Object Storage Arubacloud
+3 głosów
7,967 wizyt
pytanie zadane 28 lipca 2018 w Java przez BuxBleed Użytkownik (810 p.)
Cześć wszystkim mam problem ze zrozumieniem mechanizmu refleksji w programowaniu. Generalnie nie rozumiem samej idei i dlaczego nazywa się to akurat "refleksją" a nie na przykład czymś w rodzaju typów generycznych.

Prosiłbym o wyjaśnienie na przykładzie, najlepiej w Javie mechanizmu działania.
komentarz 28 lipca 2018 przez Aisekai Nałogowiec (42,190 p.)
Zostawiam komentarz, bo sam jestem ciekaw.

Tutaj masz opisane dlaczego to się nazywa refleksja: https://stackoverflow.com/questions/351577/why-is-reflection-called-reflection-instead-of-introspection .
komentarz 28 lipca 2018 przez Aisekai Nałogowiec (42,190 p.)
Ale postanowiłem dowiedzieć się na własną rękę i oto co znalazłem:

https://stackoverflow.com/questions/37628/what-is-reflection-and-why-is-it-useful

1 odpowiedź

+3 głosów
odpowiedź 28 lipca 2018 przez Wiciorny Ekspert (270,190 p.)
wybrane 29 lipca 2018 przez BuxBleed
 
Najlepsza

Prosta wikipedia: tu wszystko jasne jest jak ktoś rozumie sam kod w javie.

I proces tworzenia obiektów, przydzielania im pamięci przez JVM ... i czasu kiedy np JVM wymusza utworzenie obiektu, kiedy tworzony jest "leniwie" czyli nie w momencie np deklaracji ale dopiero kiedy używamy

Poniższy przykład w języku Java wykorzystuje pakiet java.lang.reflect.

 

Dzięki mechanizmowi refleksji możesz dowiedzieć się jakie klasy/metody/pola itp. zawiera program, w trakcie jego wykonywania.

 // bez refleksji
 Foo foo = new Foo();
 foo.hello();

 // z refleksją
 Class cl = Class.forName("Foo");
 Method method = cl.getMethod("hello");
 method.invoke(cl.newInstance());

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órych wartość jest ustalana w czasie wykonania kodu.

Więc tutaj z Typami generyczny,i jest inaczej: ... W MOMENCIE wykonywania pracy Kompilator Java automatycznie sam dobiera sobie "odpowiedni typ", ale do momentu tej akcji kompilator nie wie ... na bazie wstępnego załadowania klas do pamięci i przydzielania im zasobu, przestrzeni [ nie wie co kryje się pod typem generycznym ] a w refleksji z góry narzucone jest to i kompilator wie co robi.

Też trzeba to zrozumieć na tej zasadzie, że kod w JVM najpierw jest interpretowany na BYTE COD... przechodzi to przez CLASS LOADERY itd- z rozumienie tego daje dużą odpowiedź, bo mając pliki.class*  które tworzysz po  kompilacji bez uruchomienia zawierają juz wszystkie informacje dotyczące pamięci, obiektów, numerów itd itp 

 rodzaju typów generycznych.

ja nie widzę ani jednego powiązania z refleksją a typem generycznym...  

 typy generyczne są “szablonami”. Dzięki typom generycznym możemy uniknąć niepotrzebnego rzutowania. Ponadto przy ich pomocy kompilator jest w stanie sprawdzić poprawność typów na etapie kompilacji, oznacza to więcej błędów wykrytych w jej trakcie1.

Więc tutaj całkiem inna bajka bo gdyby nie ten fakt, musiałbyś  implementować tyle interfejsów np ile masz typów dla danego zbioru,  popatrz ile to robi się pracy i niepotrzebnych rzeczy skoro np osobny interfejs  ( mam tu bardziej na myśli klase implementującą interfejs )  musiałbyś stworzyc dla typu Integer i Double mający te same funkcje,operacje itd...  

Podobne pytania

0 głosów
1 odpowiedź 514 wizyt
0 głosów
2 odpowiedzi 499 wizyt
pytanie zadane 15 sierpnia 2019 w Java przez Uwegi Początkujący (430 p.)
0 głosów
0 odpowiedzi 226 wizyt
pytanie zadane 7 lipca 2019 w Java przez Uwegi Początkujący (430 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...