Reflection - az alapok
Reflection - az alapok
Véleményem szerint a Java reflexiója hasonlít a villanyáramra egy átlagos ember életében - mindannyian nagyon aktívan használják, de tényleg működik, nagyon kevesen ismerik alaposan, és ez a tudatlanság egyáltalán nem zavarja. Van egy általános megértés - és elég.
A gondolkodás mint ötlet és eszköz rendkívül fontos a hatalmas technológiák, csomagok és egyéb dolgok megértéséhez. Ezért fontos megérteni, hogy mi az, és hogy ismerjük az alapokat.
Másrészről ritka a maga a Reflection API használata (egy reflexiós funkciókészlet) a rendes programozó életében, aki az alkalmazási rendszerekkel foglalkozik.
Ie tudjátok, hogy milyen, értsd meg az alapokat, és tartsd észben az előnyöket és hátrányokat - ez csak szükséges. Fontos megjegyezni a funkciókészletet. Nem valószínű, hogy gyakran használja őket. Véleményem szerint jobb megérteni a tükröződést, és tudni, hová kell több információt találni. Bár természetesen sok az adott projekten múlik - talán a tiéd egyszerűen "elárasztja" a kódot a Reflection API használatával. és meg fogják érteni ezt a kérdést, amelyet ritkán találnak a szakemberek között. Ki tudja.
Tehát mi a gondolkodás és milyen feladatok megoldhatók?
Ha technikai lehetőségeket kínálunk, először is két cselekvési csoportot különböztetünk meg:
- Megtudhatja az osztályra vonatkozó összes információt - az osztály által végrehajtott módszereket, mezőket, konstruktorokat, konstansokat, superclassokat és osztálykapcsolatokat.
- Lehet dolgozni egy osztály (objektum), nevezetesen - hozzon létre egy osztály objektumot, végrehajtja a módszereket, kap vagy beállít mező értékeket.
Ha kibontja a listát, akkor itt adhatja meg a reflexiót:
- Tanuljon / definiáljon egy objektumosztályt
- Információk az osztálymódosítókról, mezőkről, módszerekről, konstansokról, konstruktőrökről és szuperklasszokról.
- Megtudhatja, hogy milyen módszerek tartoznak a végrehajtandó felülethez / interfészekhez.
- Hozzon létre egy példányt az osztályból, és az osztály neve ismeretlen, amíg a program fut.
- Szerezzen be és állítsa be az objektum mező értékét név szerint.
- Hívja az objektum metódusát név szerint.
És még egyszer rövid formában - a tükröződés lehetővé teszi, hogy információt kapj az osztály belső felépítéséről - mezők, módszerek stb. - és lehetővé teszi a mezők, módszerek és egyéb tárgyak elérését ezen információk segítségével.
És ami a legfontosabb: - A PROGRAM VÉGREHAJTÁSÁBAN MINDENKÉNT - ahogy gyakran mondják, futásidőben.
Ha még soha nem találkozott ilyen mechanizmussal, akkor nagyon ésszerű kérdésed lehet - és miért van ez mindez. A válasz ebben az esetben elég egyszerű, de ugyanakkor nagyon homályos - drámaian megnöveli a rugalmasságot és az alkalmazkodást.
A reflexió használatával a program abszolút ismeretlen osztály teljesen ismeretlen módszert okozhat a végrehajtás során. A fordítás időpontjában semmi sem ismert az osztályról és a módszerről. Szinte minden modern Java technológiánál a reflexivitást használják. Nehéz elképzelni, hogy a Java mint platform ilyen hatalmas terjedést érhetne el tükröződés nélkül. Valószínűleg nem sikerült.
Első ismerős
Tekintsünk egy gondolkodás egyszerűsített változatát. Alkalmazása ütemezve van (vagy valamilyen más módon) egy adott osztály egy bizonyos módjának végrehajtására. Például pénzügyi információk frissítéseinek letöltéséhez.
Egy ideig ez az információ az adatbázisban volt, és az osztály módszere képes volt ezen információk lekérésére az adatbázisból.
Ha a terv elkészült, figyelembe véve az esetleges csere az osztály, akkor a felületet leginkább meghatározni, és a végrehajtás hajtották végre, mint egy osztály az adatbázis. Valami hasonló ez a lehetőség.
Az interface struktúrája lehet egy osztály
FinanceInfoBuilder builder = (FinanceInfoBuilder) cl. newInstance ();
Az újInstance () metódus lehetővé teszi a megadott osztály objektumának létrehozását. De ez FONTOS megjegyezni - egy ilyen hívás csak akkor lehetséges, ha az osztálynak van egy konstruktora PARAMÉTEREK NÉLKÜL. Ha nincs ilyen konstruktor az osztályodban, akkor nem lesz képes ilyen egyszerű hívást használni - nehezebbnek kell lenned. Tehát egy tervező nélküli paraméterek jó ötlet.
Amint valószínűleg már kitaláltad, a hívás visszaad egy tárgy objektum objektumát, és kéznél kell a megfelelő típushoz vinni. mert támaszkodunk az osztályunk "becsületességére", amely a FinanceInfoBuilder felület támogatásával fejeződik ki, majd rávenni a célunkat.
Most, hogy módosítsa az osztályt a pénzügyi mutatók betöltésére, egyszerűen módosítsa a builder.properties fájlt. Semmi több. Aztán egy viharos, elhúzódó tapsot követett.
A NetBeans projektje itt tölthető le: FinanceExample
Osztályú osztály
Megvizsgáltuk azt az opciót, hogy betöltjük az osztályt és megteremtjük az általunk kívánt osztály objektumát. Valójában a reflexió ezen változata nagyon gyakori. Ezért nagyon ajánlom, hogy emlékezzen erre a döntésre. Most látni fogjuk, hogy nem csak a kívánt osztály objektumát hozhatja létre, hanem azt is, hogy hogyan férhet hozzá a mezőkhöz vagy a módszerekhez.
Kísérleteinkhez egy egyszerű osztályt definiálunk
A NetBeans projektje itt tölthető le: SimpleReflection