O método de construção da reflexão Java reflexão

Anterior Java Class reflexo de classe que introduziu a categoria chave da Classe reflexão java,
reflexão é mapeado por uma classe java para obter uma classe java .
Então, nós naturalmente pensar, deve haver uma classe que atribui a estar aqui, por exemplo, as pessoas com o nome ea idade propriedades, todos de uma classe Pessoa terá um nome, idade essas duas propriedades, da mesma forma, há também uma classe construtores, campos, métodos e outras propriedades.
Em seguida, vamos primeiro entender o construtor, crie um construtor objeto refletido de forma dinâmica.

[A] a classe Construtor

Construtor objeto representa um construtor, então o objeto deve ser o que maneiras nós acho que não vai ter o nome desse construtor, para obter o construtor da classe pertence, produz um objeto e outros métodos pelo construtor.
documento jdk
documento jdk a partir de onde você pode ver getName) método construtor (para obter o nome, getDeclaringClass () classe para obter a sua classe, newInstance () para criar o objeto.
No desenvolvimento, que muitas vezes newInstance () para criar dinamicamente classe Construtor objetos.

[Di] Construtor objecto obtido

Antes do método da classe Construtor apresentação, primeira descreve como obter Construtor, e da mesma classe, Construtor nem pode novo diretamente.
Aqui Insert Picture Descrição
O acima dois métodos é documento jdk classe Classe, estes dois métodos são os métodos para a configuração especificada e o acesso a todos os construtores.
Então, nós sabemos, deseja obter Construtor objeto, você deve primeiro obter um objeto de classe. Vamos demonstrar o seguinte

[Três] de demonstração

Nós ainda obter a classe String fazer apresentações.
Aqui Insert Picture Descrição
Como pode ser visto a partir da figura, classe String há muitos construtores.
apresentação castanha
1. Obter todos os construtores

    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

Pode adivinhar a partir da saída, a classe deve ter os métodos de construtor, pode ser obtido antes de métodos de construção modificadoras, parâmetros, e similares exceção lançada.



2. O método de obtenção de uma estrutura ú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 assim como métodos sobrecarregados, determinação de sobrecarga de método e diversos parâmetros com base no número de diferentes tipos de parâmetros, o método é configurado para obter um método particular de obtenção do tipo de configuração correspondente de acordo com o número de parâmetros, os parâmetros.
Aqui Insert Picture Descrição
Original tipo de classe parâmetro do método como um parâmetro do método GetConstructor de entrada, para se obter o parâmetro construtor correspondente. Da mesma forma o acesso a outros métodos de construção são os mesmos.



3. Criar um objeto via o construtor

    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

Aqui estão alguns dos meus amigos podem este erro:

    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 lote sem erros, ou seja, o código acima é o construtor parâmetro correspondente a esse construtor StringBuffer, e passar no parâmetro objeto StringBuffer não é, ele será dado.
Resumo: método de utilização de obter o tipo de aula, para utilizar o mesmo tipo da instância de objecto acima ao chamar o método.

[Tetraquis] newInstance Classe em () Método

Também na classe método Classe newInstance, ver o código fonte da classe Classe pode saber, quando este método chama o construtor padrão sem argumentos para criar objetos usando mecanismo de cache, o construtor sem argumento em cache quando chamando o método newInstance, remover o construtor sem argumentos para criar o objeto do cache.
E em que a diferença no construtor, o método newInstance de construtor da classe sem argumentos é chamado, não pode ser chamado de parâmetro de configuração.
Em seguida, dizer que o membro reflexão da reflexão Java de variáveis

Acho que você gosta

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