El método de construcción de la reflexión de Java reflexión

Anterior Java Class reflejo de la clase que introdujo la categoría clave de la reflexión de Java Class,
la reflexión, se estudia con una clase Java para obtener una clase Java .
Por lo tanto, es natural pensar en, debe haber una clase que atribuye a estar aquí, por ejemplo, las personas con el nombre y edad de propiedades, todas de una clase persona va a tener un nombre, edad estas dos propiedades, la misma razón, también hay una clase constructores, campos, métodos y otras propiedades.
A continuación, en primer lugar comprender el constructor, cree un constructor de objetos reflejados de forma dinámica.

[A] la clase Constructor

constructor de objeto representa un constructor, el objeto debe ser lo que hacemos maneras que supongo que habrá de obtener el nombre de este constructor, para obtener el constructor de la clase pertenece, produce un objeto y otros métodos por el constructor.
documento JDK
documento JDK desde donde se puede ver getNombre método constructor () para obtener el nombre, getDeclaringClass () de clase para obtener su clase, newInstance () para crear el objeto.
En el desarrollo, método que a menudo newInstance () para crear dinámicamente objetos de clase Constructor.

[Di] objeto Constructor obtuvo

Antes de que el método de la clase Constructor presentación, primero describe cómo conseguir Constructor, y la misma clase, ni puede Constructor nueva directamente.
Aquí Insertar imagen Descripción
Lo anterior dos métodos es documento jdk clase Clase, estos dos métodos son los métodos para la configuración especificada y el acceso a todos los constructores.
Por lo que sabemos, que desee obtener constructor de objeto, primero debe obtener un objeto de clase. Vamos a demostrar lo siguiente

[Tres] demostración

Todavía recibimos la clase String hacer presentaciones.
Aquí Insertar imagen Descripción
Como puede verse en la figura, clase String hay muchos constructores.
presentación de castaño
1. Obtener todos los constructores

    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("java.lang.String");
        //获取所有构造方法
        Constructor[] constructor = cls.getConstructors();
        for(Constructor cons : constructor){
            System.out.println(cons);
        }
    }

resultados:

public java.lang.String(byte[],int)
public java.lang.String(byte[],int,int,java.nio.charset.Charset)
public java.lang.String(java.lang.StringBuffer)
public java.lang.String(byte[])
public java.lang.String(byte[],int,int)
public java.lang.String(byte[],java.nio.charset.Charset)
public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException
public java.lang.String()
public java.lang.String(java.lang.StringBuilder)
public java.lang.String(byte[],int,int,int)
public java.lang.String(int[],int,int)
public java.lang.String(char[],int,int)
public java.lang.String(char[])
public java.lang.String(java.lang.String)
public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingException

Puede adivinar a partir de la salida de, la clase debe tener los métodos constructor, se puede obtener antes de los métodos de construcción modificadoras, parámetros, y la excepción lanzada similares.



2. El método de obtención de una estructura única

    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("java.lang.String");
        //获取单个构造方法
        Constructor constructor = cls.getConstructor(StringBuffer.class);
        String constructorName = constructor.getName();
        System.out.println(constructorName);
    }

resultados:

java.lang.String

Java al igual que métodos sobrecargados, la determinación de la sobrecarga de métodos y diversos parámetros basados en el número de diferentes tipos de parámetros, el método está configurado para obtener un método particular de obtener el tipo de configuración correspondiente de acuerdo con el número de parámetros, los parámetros.
Aquí Insertar imagen Descripción
Original parámetro del método de tipo de clase como un parámetro del método getConstructor entrante, para obtener el parámetro constructor correspondiente. Del mismo modo el acceso a otros métodos de construcción son los mismos.



3. Crear un objeto a través del constructor

    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("java.lang.String");
        //获取单个构造方法
        Constructor constructor = cls.getConstructor(StringBuffer.class);
        //由于在编译时,无法检测到是什么类型的Constructor所以需要进行类型强转
        String str = (String)constructor.newInstance(new StringBuffer("abc"));
        //拿到反射出来的对象,调用charAt方法测试
        System.out.println(str.charAt(2));
    }

resultados:

c

Éstos son algunos de mis amigos Puede ser que este error:

    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("java.lang.String");
        //获取单个构造方法
        Constructor constructor = cls.getConstructor(StringBuffer.class);
        //由于在编译时,无法检测到是什么类型的Constructor所以需要进行类型强转
        String str = (String)constructor.newInstance("abc");
        //拿到反射出来的对象,调用charAt方法测试
        System.out.println(str.charAt(2));
    }

resultados:

Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at club.leyvan.muzile.ConstructDemo.main(ConstructDemo.java:12)

Tipo de lotes sin errores, es decir, el código anterior es el constructor de parámetro correspondiente a este constructor StringBuffer, y pasar en el parámetro objeto StringBuffer es no, se os dará.
Resumen: método de uso de obtener el tipo de clase, para usar el mismo tipo de la instancia del objeto por encima de al llamar al método.

método [tetraquis] newInstance Class en ()

También en la clase de método de clase newInstance, ver el código fuente de la clase Clase puede saber, cuando este método llama al constructor por defecto sin argumentos para crear objetos usando mecanismo de caché, el constructor sin argumentos en caché cuando se llama método newInstance, quitar el constructor sin argumentos para crear el objeto de la caché.
Y porque la diferencia en el constructor, el método constructor de la clase de newInstance sin argumentos se llama, no puede ser llamado parámetro de configuración.
A continuación se dice que el cuerpo de reflexión de la reflexión de Java de variables

Supongo que te gusta

Origin www.cnblogs.com/leyvan/p/12461691.html
Recomendado
Clasificación