MENÚ

Reflexión de Java simplificada

Tabla de contenido

Reflexión de Java simplificada

JavadereflexiónPresentamos una clase de utilidad que le permite utilizar fácilmente la API.

¿Qué es la reflexión?

API de reflexióndientes,"java.lang.reflect"incluido en el paquete,
Esta es una API que recupera información como campos y métodos de clases Java.
Se utilizan principalmente las siguientes clases.

  • clase java.lang.
  • java.lang.reflect.Constructor
  • java.lang.reflect.Método
  • java.lang.reflect.Field

reflexiónAl utilizar , puede crear clases o llamar a métodos sin tener que codificarlos directamente.
Puede crear una instancia de clase a partir de una cadena o ejecutar un método.

Al escribir las definiciones de nombres de clases y nombres de métodos en archivos externos como XML, puede adaptar dinámicamente la aplicación a los cambios en el entorno durante el tiempo de ejecución.
También es una API muy eficaz para crear aplicaciones muy flexibles.


Propósito de la reflexión

reflexiónlos usuarios no suelen utilizarlo directamente,
Se usa ampliamente en aplicaciones web como Struts y marcos como el mapeo O/R.

Por ejemplo, al configurar automáticamente los datos de entrada de la pantalla web en las propiedades de JavaBeans,
Se utiliza al emitir SQL que se actualiza automáticamente en función de las propiedades de JavaBeans.

Además, están disponibles funciones como cargar y registrar complementos dinámicamente que amplían la funcionalidad cuando se inicia la aplicación.reflexiónEsto se puede lograr fácilmente usando .

Ejecutando la muestra

Ejecute la muestra y experimente la programación similar a un marco.

Aquí usamos la siguiente clase.reflexiónDemuestra un uso simple de la utilidad.

principal.java...Clase a ejecutar
BeanUtil.java...Clase de utilidad de reflexión
FreeSoft.java...Usado como reflexión en una clase que representa el software libre.

●Cuando se ejecuta normalmente

System.out.println(“>>>Caso normal”);
FreeSoft freeSoft = nuevo FreeSoft();
freeSoft.setNombre(“¡Chat y Messenger, Chat y Messenger!!”);
freeSoft.showName();
freeSoft.showPrice(0);

●Cuando se ejecuta utilizando la reflexión

System.out.println(“>>>Cuando se usa la reflexión”);
//Crear una instancia de la clase FreeSoft
Objeto invocarObjeto = BeanUtil.newInstance(“LibreSoft”);
//Establece el valor en el campo de nombre.
BeanUtil.setProperty(invocarObjeto, "nombre" , “¡¡Chat y Messenger Chat y Messenger!!”);
// Ejecuta el método showName() de FreeSoft.
BeanUtil.invoke(invocarObjeto, "mostrar nombre", nulo);
// Ejecuta el método showPrice() de FreeSoft.
// Si el método tiene argumentos, deben pasarse como una matriz de tipo Objeto.
BeanUtil.invoke(invocarObjeto, “mostrarPrecio”,nuevo Objeto[]{nuevo Entero(0)});

●Resultados de ejecución

Los resultados de la ejecución son los mismos ya sea en el caso normal o cuando se utiliza la reflexión.

>>> Caso normal

Nombre del software: Chat&Messenger ¡Chat y messenger! !

Precio: 0 yenes

>>> Cuando se utiliza la reflexión

Nombre del software: Chat&Messenger ¡Chat y messenger! !

Precio: 0 yenes

Detalles del método BeanUtil

nueva instancia

objeto estático público nueva instancia(String className) lanza una excepción
Genera y devuelve una instancia a partir de la cadena "className".

Parámetros:
nombre de la clase – Nombre de clase completo
Valor de retorno:
Una nueva instancia de un nombre de clase completo
excepción:
Excepción

nueva instancia

objeto estático público nueva instancia(String className, Object[] argObj) lanza una excepción
Genera y devuelve una instancia a partir de la cadena "className".

Parámetros:
nombre de la clase – Nombre de clase completo
argObj – Argumentos del constructor
Valor de retorno:
Una nueva instancia de un nombre de clase completo
excepción:
Excepción

nueva instancia

objeto estático público nueva instancia(Clase clazz) lanza una excepción
Genera y devuelve una instancia de la clase "clazz".

Parámetros:
clazz - clase
Valor de retorno:
nueva instancia de clazz
excepción:
Excepción

nueva instancia

objeto estático público nueva instancia(Clase clazz, Objeto[] argObj) arroja una excepción
Genera y devuelve una instancia de la clase "clazz".

Parámetros:
clazz - clase
argObj – Argumentos del constructor
Valor de retorno:
nueva instancia de clazz
excepción:
Excepción

establecer propiedad

vacío público estático establecer propiedad(Objeto invocarObjeto, Nombre de campo de cadena, Valor de objeto) arroja una excepción
Llame al método de establecimiento del campo "fieldName" del objeto "invokeObject" y almacene el valor "value".

Si no existe un método de establecimiento, el valor se establecerá directamente en el campo. Sin embargo, en este caso, el modificador de acceso de la propiedad de destino debe ser público.

Parámetros:
invocarObjeto – Objeto a ejecutar
nombre del campo – Nombre de propiedad del objeto a ejecutar.
valor – Valor a configurar
excepción:
Excepción – Se produce la siguiente excepción.
Excepción de invocación de objetivos – Si el método subyacente arroja una excepción
Excepción de acceso ilegal – Este objeto de método es Java
Cuando se implementa el control de acceso al idioma y no se puede acceder al método subyacente
No existe tal excepción de método – Si no se encuentra un método con el nombre especificado

obtener propiedad

objeto estático público obtener propiedad(Objeto invokeObject, String fieldName) arroja una excepción
Llama al método getter del campo fieldName del objeto invokeObject para obtener el valor.
Si no existe un método getter, el valor se recuperará directamente del campo. Sin embargo, en este caso, el modificador de acceso de la propiedad de destino debe ser público.

Parámetros:
invocarObjeto – Objeto a ejecutar
nombre del campo – Nombre de propiedad del objeto a ejecutar.
Valor de retorno:
Valor de retorno del método getter
excepción:
Excepción – Se produce la siguiente excepción.
Excepción de invocación de objetivos – Si el método subyacente arroja una excepción
Excepción de acceso ilegal – Este objeto de método es Java
Cuando se implementa el control de acceso al idioma y no se puede acceder al método subyacente
Ninguna excepción de campo tal – Si no se encuentra un campo con el nombre especificado

invocar

objeto estático público invocar(Objeto invokeObject, String callMethod, Object[] argObjects) lanza InvocationTargetException, IllegalAccessException, NoSuchMethodException
Ejecuta el método "callMethod" del objeto "invokeObject".
Si hay un valor de retorno, se puede obtener como Objeto.

Parámetros:
invocarObjeto – Objeto a ejecutar
método de llamada – Nombre del método a ejecutar.
argObjetos – Si hay argumentos, páselos como una matriz de objetos. Si no hay argumentos, pase nulo.
Valor de retorno:
Valor de retorno de la ejecución de "callMethod"
excepción:
Excepción de invocación de objetivos – Si el método subyacente arroja una excepción
Excepción de acceso ilegal – Este objeto de método es Java
Cuando se implementa el control de acceso al idioma y no se puede acceder al método subyacente
No existe tal excepción de método – Si no se encuentra un método con el nombre especificado

encontrarmétodo

método estático público encontrarmétodo(Objeto invokeObject, String callMethod, Object[] argObjects) lanza NoSuchMethodException
Busque el método 'callMethod' del objeto 'invokeObject'.

Parámetros:
invocarObjeto – Objeto a ejecutar
método de llamada – Nombre del método del objeto a ejecutar.
argObjetos – Si hay argumentos, páselos como una matriz de objetos. Si no hay argumentos, pase nulo.
Valor de retorno:
Un objeto Método que coincide con las condiciones del argumento especificado.
excepción:
No existe tal excepción de método – Si no se encuentra ningún método coincidente, o si el nombre es “” o “”

establecer campo

vacío público estático establecer campo(Objeto invokeObject, nombre de campo de cadena, valor de objeto) lanza IllegalAccessException, NoSuchFieldException
Almacena el valor "value" en el nombre del campo "fieldName" del objeto a ejecutar "invokeObject".

Parámetros:
invocarObjeto – Objeto a ejecutar
nombre del campo – Nombre del campo del objeto a ejecutar.
valor – Valor a configurar
excepción:
Excepción de acceso ilegal – El campo en el que se basa el objeto especificado (o su subclase o implementador)
no es una instancia de la clase o interfaz que declara, o si falla la conversión de desempaquetado
Ninguna excepción de campo tal – Si no se encuentra un campo con el nombre especificado

obtener campo

objeto estático público obtener campo(Objeto invokeObject, String fieldName) lanza IllegalAccessException, NoSuchFieldException
Obtiene el valor del nombre de campo "fieldName" del objeto a ejecutar "invokeObject".

Parámetros:
invocarObjeto – Objeto a ejecutar
nombre del campo – Nombre del campo del objeto a ejecutar.
Valor de retorno:
valor de retorno
excepción:
Excepción de acceso ilegal – El campo en el que se basa el objeto especificado (o su subclase o implementador)
no es una instancia de la clase o interfaz que declara, o si falla la conversión de desempaquetado
Ninguna excepción de campo tal – Si no se encuentra un campo con el nombre especificado

tiene campo

booleano estático público tiene campo(Objeto objeto, nombre de campo de cadena) arroja una excepción
Comprueba si el objeto 'objeto' declara el nombre de campo 'nombreDeCampo'.

Parámetros:
objeto – Objeto a inspeccionar
nombre del campo – Nombre del campo a comprobar
Valor de retorno:
verdadero si se declara
excepción:
Excepción

obtener todos los campos

público estático java.util.TreeSet obtener todos los campos(Objeto objeto) lanza una excepción
Parámetros:
objeto
Valor de retorno:
excepción:
Excepción

obtener nombre de clase corta

cadena estática pública obtener nombre de clase corta(Objeto Objeto)
Obtiene el nombre de clase no calificado de un objeto.

Parámetros:
objeto
Valor de retorno:

obtener nombre de clase corta

cadena estática pública obtener nombre de clase corta(Nombre de clase de cadena)
Obtiene el nombre de la clase a partir del nombre completo.

Parámetros:
nombre de la clase
Valor de retorno:

obtener nombre de campo

cadena estática pública obtener nombre de campo(Nombre del método de cadena)
Cambie el nombre del campo del nombre del método. Debe ajustarse a las convenciones de JavaBeans.

Parámetros:
nombre del método
Valor de retorno:

esClaseExiste

booleano estático público esClaseExiste(Nombre de clase de cadena)
Verifica que el nombre completo "className" sea un nombre de clase existente.

Parámetros:
nombre de la clase
Valor de retorno:

obtenerDescriptores de propiedad

PropertyDescriptor estático público [] obtenerDescriptores de propiedad(Objeto objeto) lanza IntrospectionException
Devuelve un PropertyDescriptor que contiene información de objeto para "objeto".

Parámetros:
objeto
Valor de retorno:
excepción:
java.beans.IntrospectionException

Código fuente de BeanUtil

  • URLをコピーしました!
Tabla de contenido