La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Introducción Características de la API Examinando clases (java.lang.Class) Manipulación de instancias Instanciación Manipulación de atributos Invocación.

Presentaciones similares


Presentación del tema: "Introducción Características de la API Examinando clases (java.lang.Class) Manipulación de instancias Instanciación Manipulación de atributos Invocación."— Transcripción de la presentación:

1

2 Introducción Características de la API Examinando clases (java.lang.Class) Manipulación de instancias Instanciación Manipulación de atributos Invocación de métodos Sumario

3 Java posee la capacidad de introspección o reflection Mecanismo para descubrir en tiempo de ejecución la información (meta-datos) relacionada con los atributos, constructores y métodos de una clase

4 La API permite: Determinar la clase de un objeto Obtener información acerca de Modificadores Atributos Métodos Constructores Superclases. Descubrir las constantes y declaraciones de métodos de una interface

5 Situación: A veces es necesario obtener información de una clase en tiempo de ejecución Ejemplo: class browser Un objeto de tipo java.lang.Class representa (refleja) una clase. La JVM mantiene un objeto inmutable de este tipo para cada clase

6 En este caso, veremos ejemplos de la creación de objetos de tipo TwoString mediante Reflection. La clase TwoString esta dada por: TwoString.java public class TwoString { private String m_s1, m_s2; public TwoString(String s1, String s2) { m_s1 = s1; m_s2 = s2; }

7 Sobre una instancia (método getClass de Object) Class c = myObject.getClass(); Superclases ¿Como obtengo el descriptor de la clase Vehiculo que es superclase de Automovil? Automovil a = new Automovil(); Class c = a.getClass(); Class superclase = c.getSuperclass();

8 Método String getName() import java.lang.reflect.*; import java.util.*; public class TestClassName { public static void main(String[] args) { Date now = new Date(); printClassName(now); } static void printClassName(Object o) { Class c = o.getClass(); String s = c.getName(); System.out.println(s); } }

9 import java.lang.reflect.*; import java.awt.*; public class TestModifiers { public static void main(String[] args) { String s = new String(); printModifiers(s); } public static void printModifiers(Object o) { Class c = o.getClass(); int m = c.getModifiers(); if (Modifier.isPublic(m)) System.out.println("public"); if (Modifier.isAbstract(m)) System.out.println("abstract"); if (Modifier.isFinal(m)) System.out.println("final"); } }

10 import java.lang.reflect.*; import java.awt.*; class SampleSuper { public static void main(String[] args) { Button b = new Button(); printSuperclasses(b); } static void printSuperclasses(Object o) { Class subclass = o.getClass(); Class superclass = subclass.getSuperclass(); while (superclass != null) { String className = superclass.getName(); System.out.println(className); subclass = superclass; superclass = subclass.getSuperclass(); } } }

11 Método boolean isInterface() Obtener las constantes primitivas públicas definidas en la interface: Field [] getFields() Obtener los métodos públicos declarados en la interface: Method [] getMethods()

12 Como ya hemos dicho antes, los métodos de la API Reflection nos permiten acceder a los campos y métodos públicos (por eso no aparecen , getNombre y setNombre) y los métodos hashCode, getClass, etc. son métodos de la clase java.lang.Object, de la que hereda nuestra clase. En este caso, veremos un ejemplo en el cual se obtiene información de una clase como ser: métodos y campos,

13 A continuación veremos un ejemplo en el cual utilizaremos algunos de los métodos que nos proporciona la API de Reflection. Dentro del ejemplo, se crea una instancia de una clase en tiempo de ejecución, se obtiene información de los métodos de dicha clase y atributos

14 Luego de ejecutar el código del ejemplo anterior, se obtiene: Lista de campos nombre Lista de métodos set get hashCode getClass wait equals notify notifyAll toString

15 Reflection, también nos permite obtener información de los constructores. A continuación veremos un ejemplo de cómo crear instancias de objetos en tiempo de ejecución, pudiendo seleccionar que constructor utilizar.

16 Métodos propios y heredados Method [] getMethods() Nuevos métodos declarados en la clase Method [] getDeclaredMethods() Un objeto de tipo Method puede usarse para obtener: Nombre del método Tipo de retorno Tipos de los parámetros Conjunto de modificadores Conjunto de excepciones declaradas

17 Propios y heredados Método Field [] getFields() Los declarados a nivel de la clase Método Field [] getDeclaredFields()

18 Para usar el constructor sin argumentos Método Object newInstance() de la clase Class Class c = …; Object o = c.newInstance(); Para usar constructores con argumentos Método Object newInstance() de la clase Constructor // Obtengo el constructor Constructor cons = …; Object o = cons.newInstance(); Declaran la excepción NoSuchMethodException

19 En el ejemplo anterior, se crea un objeto de tipo constructor2, utilizando el método getConstructor y newInstance. En este caso, se pasan por parámetro los valores correspondientes para el constructor2 que recibe dos enteros.

20 Recuperación del valor de un atributo primitivo Métodos getXXX sobre las instancias de la clase Field Ejemplo (f de tipo Field, obj objeto a consultar): int i = f.getInt(obj); Recuperación del valor de un atributo objeto Método get sobre las instancias de la clase Field Ejemplo (f de tipo Field, obj objeto a consultar): Object i = f.get(obj); Se aplican las reglas definidas por los modificadores!

21 Establecer el valor de un atributo primitivo Métodos setXXX sobre las instancias de la clase Field Ejemplo (f de tipo Field, obj objeto a modificar): f.setBoolean(obj, true); Establecer el valor de un atributo objeto Método set sobre las instancias de la clase Field Ejemplo (f de tipo Field, obj objeto a modificar): f.set(obj, new Date()); Se aplican las reglas definidas por los modificadores!

22 Invocación de métodos Obtener el objeto Method asociado al método a invocar Invocar el método Object invoke(Object target, Object [] args) target es la instancia sobre la que se invocará el método

23 Se modifica la API de reflection para dar soporte a argumentos variables Class.getMethod Method.invoke Constructor.newInstance Proxy.getProxyClass MessageFormat.format

24 Qué es Reflection? Para qué sirve? java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Field java.lang.reflect.Method java.lang.reflect.Modifier java.lang.Object

25 The Java Tutorial Trail de reflection


Descargar ppt "Introducción Características de la API Examinando clases (java.lang.Class) Manipulación de instancias Instanciación Manipulación de atributos Invocación."

Presentaciones similares


Anuncios Google