Aprendizaje por reflexión de Java <BR>La llamada reflexión puede entenderse como la operación de obtener información del tipo de objeto durante el tiempo de ejecución. Los métodos de programación tradicionales requieren que los programadores decidan los tipos a utilizar en la etapa de compilación, pero con la ayuda de la reflexión, los programadores pueden obtener esta información dinámicamente y escribir código más portátil. Estrictamente hablando, la reflexión no es una característica de un lenguaje de programación, porque el mecanismo de reflexión se puede implementar en cualquier lenguaje, pero si el propio lenguaje de programación admite la reflexión, entonces la implementación de la reflexión será mucho más conveniente.
1. Obtenga la clase de tipo <BR>Sabemos que todo en Java es un objeto, y los objetos que usamos generalmente heredan directa o indirectamente de la clase Objeto. La clase Object contiene un método llamado getClass, que se puede utilizar para obtener la clase de tipo de una instancia. Una clase de tipo se refiere a una clase que representa un tipo, porque todo es un objeto y los tipos no son una excepción. En Java, una clase de tipo se usa para representar un tipo. Todas las clases de tipos son instancias de la clase Class. Por ejemplo, aquí está el siguiente código:
A a = nueva A();
si(a.getClass()==A.clase)
System.out.println("igual");
else System.out.println("desigual");
El resultado se imprime "igual".
Se puede ver que el objeto a es una instancia de A, una determinada clase de A. El resultado devuelto al usar a.getClass() en la declaración if es exactamente la clase de tipo de A. Para expresar un tipo específico de clase de tipo en Java, puedes usar el método "Type.class", porque a.getClass() obtiene la clase de tipo de A, que es A.class, por lo que el resultado de ejecutar el código anterior es imprimir "igual". Una nota especial es que las clases de tipos tienen una correspondencia uno a uno. La clase de tipo de la clase principal y la clase de tipo de la subclase son diferentes. Por lo tanto, suponiendo que A es una subclase de B, el siguiente código obtendrá el resultado de. "desigual":
A a = nueva A();
si(a.getClass()==B.clase)
System.out.println("igual");
else System.out.println("desigual");
Entonces, si conoce una instancia, puede obtener la clase de tipo de ese objeto usando el método "getClass()" de la instancia, y si conoce un tipo, puede obtener la clase de tipo de ese tipo usando el método ".class". .
2. Obtener información de tipo <BR>Después de obtener la clase de tipo, puede llamar a algunos de los métodos para obtener información de tipo. Los métodos principales son:
getName():String: obtiene el nombre completo del tipo.
getSuperClass():Clase: obtiene la clase principal directa de este tipo. Si el tipo no tiene una clase principal directa, devuelve nulo.
getInterfaces():Class[]: Obtiene todas las interfaces implementadas por este tipo.
isArray():boolean: determina si el tipo es una matriz.
isEnum():boolean: determina si el tipo es un tipo de enumeración.
isInterface():boolean: determina si el tipo es una interfaz.
isPrimitive():boolean: determina si el tipo es un tipo básico, es decir, si es int, boolean, double, etc.
isAssignableFrom(Class cls):boolean: determina si este tipo es la clase principal (antepasada) o la interfaz principal (antepasada) del tipo cls.
getComponentType():Clase: si el tipo es una matriz, devuelve el tipo de componente de la matriz.
Además, también se pueden realizar operaciones como la conversión de tipos. Los métodos principales son:
asSubclass(Class clazz):Clase: cambiar este tipo