Reflexió és un procés d'examen o modificació del comportament en temps d'execució d'una classe en temps d'execució . API Java Reflection s'utilitza per manipular la classe i els seus membres que inclouen camps, mètodes, constructor, etc. en temps d'execució. En aquest article entendríem amb detall l'API de Java Reflection.
Aquest article se centrarà en els consells següents:
- On es va utilitzar l'API Java Reflection?
- Classe al paquet java.lang.reflect
- Mètodes utilitzats a java.lang.Class
- Com obtenir l’objecte de la classe Class?
- Avantatges i desavantatges d’utilitzar l’API Java Reflection
Comencem, doncs, amb aquests indicadors en aquest article sobre Java Reflection API
On s’utilitza l’API Java Reflection?
L'API Reflection s'utilitza principalment en:
- IDE (entorn de desenvolupament integrat), p. Eclipse, MyEclipse, NetBeans, etc.
- Depurador
- Eines de prova, etc.
Llavors, què és el paquet Class in Java lang reflect?
Classe al paquet java.lang.reflect?
A continuació es mostra una llista de diverses classes de Java a java.lang.package per implementar la reflexió-
- Camp : Aquesta classe s'utilitza per recopilar informació declarativa com ara tipus de dades, modificador d'accés, nom i valor d'una variable.
- Mètode : Aquesta classe s'utilitza per recopilar informació declarativa com ara modificador d'accés, tipus de retorn, nom, tipus de paràmetres i tipus d'excepció d'un mètode.
- constructor : Aquesta classe s'utilitza per recopilar informació declarativa, com ara modificadors d'accés, noms i tipus de paràmetres d'un constructor.
- Edita : Aquesta classe s'utilitza per recopilar informació sobre un modificador d'accés en particular.
No, donem una ullada als mètodes de l'API de Java Reflection,
Mètodes utilitzats a java.lang.Class
Mètode | Descripció |
public String getName () | retorna el nom de la classe |
public static Class forName (String className) llança ClassNotFoundException | carrega la classe i retorna la referència de la classe Class. |
public Object newInstance () llança InstantiationException, IllegalAccessException | crea una nova instància. implementant una llista enllaçada al c |
isInterface boolean públic () | comprova si és interfície. |
isArray booleà públic () ronda doble a int java | comprova si és matriu. |
booleà públic isPrimitive () | comprova si és primitiu. |
public class getSuperclass () | retorna la referència de classe de superclasse. |
public Field [] getDeclaredFields () llança SecurityException | retorna el nombre total de camps d'aquesta classe. |
public Method [] getDeclaredMethods () llança SecurityException | retorna el nombre total de mètodes d'aquesta classe. |
public Constructor [] getDeclaredConstructors () llança SecurityException | retorna el nombre total de constructors d'aquesta classe. |
mètode públic getDeclaredMethod (nom de la cadena, classe [] parametresTipus) llança NoSuchMethodException, SecurityException | retorna la instància de classe de mètode. |
Com obtenir l’objecte de la classe Class?
Hi ha 3 maneres d'obtenir la instància de classe Class. Són els següents:
- forName () mètode de la classe Class
- mètode getClass () de la classe Object
- la sintaxi .class
forName () mètode de la classe Class
- s’utilitza per carregar la classe dinàmicament.
- retorna la instància de classe Class.
- S’ha d’utilitzar si coneixeu el nom complet de la classe, que no es pot utilitzar per als tipus primitius.
Vegem l’exemple senzill del mètode forName ().
class Simple {} class Test {public static void main (String args []) {Class c = Class.forName ('Simple') System.out.println (c.getName ())}}
Sortida:
simple
Java Reflection: mètode API getClass () de la classe Object
Torna la instància de classe Class. S’ha d’utilitzar si coneixeu el tipus. A més, es pot utilitzar amb primitius.
class Simple {} class Test {void printName (object object) {Class c = obj.getClass () System.out.println (c.getName ())} public static void main (String args []) {Simple s = new Simple () Test t = new Test () t.printName (s)}}
Sortida:
simple
passar per referència en java
La sintaxi .class
Si hi ha un tipus disponible però no hi ha cap instància, és possible obtenir una classe afegint '.class' al nom del tipus. Es pot utilitzar també per a tipus de dades primitives.
classe Test {public static void main (String args []) {Class c = boolean.class System.out.println (c.getName ()) Class c2 = Test.class System.out.println (c2.getName ()) }}
Sortida:
booleà
Prova
Ara continuem amb aquest article de l'API de Java Reflection
Avantatges i desavantatges d’utilitzar l’API Java Reflection
Avantatges d'utilitzar l'API Java Reflection
- Funcions d’extensibilitat: Una aplicació pot fer ús de classes externes definides per l’usuari creant instàncies d’objectes d’extensibilitat mitjançant els seus noms completament qualificats.
- Eines de depuració i prova : Els depuradors utilitzen la propietat de la reflexió per examinar els membres privats de les classes.
Inconvenients d'utilitzar l'API Java Reflection
- Rendiment general: Les operacions reflectants tenen un rendiment més lent que les seves contraparts no reflectants, i s’han d’evitar en seccions de codi que s’anomenen freqüentment en aplicacions sensibles al rendiment.
- Exposició d’internes: El codi reflexiu trenca les abstraccions i, per tant, pot canviar el comportament amb les actualitzacions de la plataforma.
Així hem arribat al final d’aquest article sobre ‘Java Reflection API’. Si voleu obtenir més informació,fes un cop d'ull al per Edureka, una empresa d’aprenentatge en línia de confiança. El curs de formació i certificació Java J2EE i SOA d’Edureka està dissenyat per formar-vos tant per a conceptes bàsics com avançats de Java juntament amb diversos marcs Java com Hibernate & Spring.
Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest article i us respondrem el més aviat possible.