Develnotes - reflexió java - néhány példa

Reflection in Java - néhány példát.

A Wikipedia szerint a reflexió - a folyamat, amelynek során a program ellenőrzi, és módosíthatja azok szerkezetét a futás során. Elmondhatjuk, hogy a program „írja,” része maga a kód, jobbra idején annak végrehajtását. Reflection - egy alfaja meta-programozás - programokat hoztak létre a folyamat végrehajtása más programok generálnak. Ebben az esetben bizonyos része (vagy egésze) program célja, hogy a létrehozott program végrehajtása során némi logika, hogy a „normális” megközelítés létrehoz egy programozó. Mert mi van? Ez nagyon egyszerű - néha néhány adatot, amelyek elengedhetetlenek létre az algoritmus nem áll rendelkezésre a tervezési szakaszban a program. Például: köztudott, hogy annak szükségességét, hogy bizonyos módszerek egy tárgy, de mi - világos lesz csak a futás során. Itt jön a támogatás tükrözi. Ugyanakkor szeretnék adni néhány egyszerű példát végrehajtását tükrözi a Java. Nézzük meg őket - válik világossá, ha lehet használni reflexió egy adott helyzetben.

1. példa: objektum létrehozása.

Tegyük fel, hogy szeretnénk létrehozni egy példányt a megadott objektumot. Milyen konkrét objektum típusát nem világos kezdetben, csak annyit tudunk, hogy a legmagasabb típusú a hierarchiában a Java objektumok - java.lang.Object. Ha lehetséges objektum típusok előzetesen ismert, biztosítani tudjuk a csekket a instanceof operátor. De tegyük fel - sok fajta, és ellenőrzés mindegyikük nem lehetséges, akkor szükség van egy átfogó megoldást. Miután létrehozott egy példányát egy tárgy egyes műveletek végezhetők vele, ismét a segítségével a mérlegelés. Végtére is, nem tudjuk, hogy milyen típusú objektum vezetünk - és ez nem szükséges. Egy nagyon egyszerű példa:

2. példa: hív egy módszer egy tárgy.

Nézzük meg egy módszert, amely lehetővé teszi, hogy hívja az adott tárgy nevű módszerrel. Amennyiben ilyen módszer nem létezik, hogy el kell dobni NoSuchMethodException. Kivétel lehallgatás beállítása, mert az eljárás meghívásakor egy tárgyat lehet generálni egyéb kivételek.

Mint látható, a módszer lehetővé teszi, hogy hívja az adott módszert nevezik - vagy anélkül érveket. Meg kell figyelni, hogy az eljárás findMethodAtClass. Úgy tűnik, hogy ismerjük a tényleges típusú objektum, ismerjük a módszer neve, mire van szüksége?

A tény az, hogy ha az eljárás meghívásakor egy objektumot reflexió - meg kell tudni, hogy melyik osztály határozza meg a módszert. Tegyük fel, hogy - a cél osztály egy alosztálya superclass, amely meghatározza a kívánt módszert, és a cél osztályban nincs ilyen módszer - tudnunk kell. Szerezd meg a módszer célja az alosztály nem fog működni. Ez úgy néz ki, akár egy bizonyos módszer - a magasabb osztály hierarchia, kezdve a jelenlegi (típus, amely az adott objektum).

3. példa: hozzáférés osztályú területeken.

Reflexió, akkor a hozzáférés minden területen osztály nevét.

Develnotes - reflexió java - néhány példa

Elolvashatja és módosítsa az értékeket a magán területeken, és még az utolsó területeken. Pontosabban -, akkor a „röptében”, hogy hasonló területen nyitott olvasási és / vagy változtatásokat - így el tudja érni, hogy a területen, amely deklaráltan saját, minden osztályban. Példaként - egy osztály saját végső mező nevét. Olvassa el a mező értéke, a korábban férhetnek hozzá, és akkor változtassa meg az értéket: