Este artigo analisa o mecanismo de reflexão Java em um exemplo. Compartilhe -o para sua referência, como segue:
Reflexão, muitas vezes os ouvi dizer que havia lido alguns materiais e poderia ter usado -os no padrão de design, mas senti que não tinha um entendimento mais profundo disso.
1. Vamos dar uma olhada no conceito de reflexão:
Refere -se principalmente a uma habilidade que um programa pode acessar, detectar e modificar seu próprio estado ou comportamento e pode ajustar ou modificar o estado e a semântica relacionada do aplicativo descreveu o comportamento com base no estado e nos resultados de seu próprio comportamento.
A reflexão é uma ferramenta poderosa em Java que nos permite criar um código flexível facilmente que pode ser montado ao executar sem precisar vincular o código -fonte entre os componentes. Mas o uso inadequado da reflexão será muito caro!
É tonto ver o conceito, continue lendo.
2. O papel do mecanismo de reflexão:
1. Decompile: .class->. Java
2. Acesse as propriedades, métodos, construtores, etc. de objetos Java através do mecanismo de reflexão;
Isso parece mais fácil de entender.
3. Vamos primeiro olhar para as aulas que o Sun nos fornece com o mecanismo de reflexão:
java.lang.class; java.lang.reflect.Constructor;
Podemos consultar muitos métodos, atributos e outras operações em reflexão dessas quatro classes. Ou você precisa aprender a consultar constantemente a API?
4. Implementação de funções específicas:
1. Existem três maneiras de obter a classe pelo mecanismo de reflexão.
// O primeiro método: ClassC1 = Class.Forname ("Employee"); Objeto no idioma Java possui um método getClass funcionário = novo funcionário ();2. Crie um objeto: Depois de obter a classe, criaremos seu objeto e usaremos o NewInstance:
Classe C = Class.ForName ("Employee"); // Crie uma nova instância da classe representada por esta classe ObjectO = C.NewInstance ();3. Obtenha atributos: dividido em todos os atributos e atributos especificados:
①.
// Obtenha a classe inteira classe C = classe.ForName ("java.lang.integer"); // obtém todos os atributos? Campo [] fs = c.getDecLaredFields (); // Defina String variável-Length, use para armazenar o atributo stringbuffer sb = new stringbuffer (); // dividiu cada atributo nessa string, anexando o método // a definição pública mais externa sb.append (modifier.toString (c.getModifiers ()) + "classe" + c.getSimplename (nome ) +"{/n"); // cada propriedade interna para (campo de campo: fs) {sb.append ("/t"); // espaço sb.append (modifier .toString (field.getModifiers ()) + ""); // Obtenha os modificadores do atributo, como público, estático, etc. sb.append (field.gettype (). field.getName () + ";/n"); // nome da propriedade + enter} sb.append ("}"); system.out.println (sb);②.
public static void main (string [] args) lança exceção {<span style = "space branco: pre"> </span> // formas anteriores:/* user u = new user (); // set System.out.println (u.age); ); // Atribua o valor "110" ao atributo ID do objeto O Idf.Set (O, "110");4. Obtenha métodos e métodos de construção, não descrevem mais em detalhes, basta olhar para as palavras -chave:
Palavras -chave do método
significado
getDecLaredMethods ()
Obtenha todos os métodos
getreturnType ()
Obtenha o tipo de método de retorno
getParameterTypes ()
Obtenha o tipo de parâmetro recebido do método
getDecLaredMethod ("Nome do método", tipo de parâmetro.class, ...)
Obtenha um método específico
Palavras -chave do construtor
significado
getDecLaredConstructors ()
Obtenha todos os construtores
getDecLaredConstructor (Tipo de parâmetro.class, ...)
Obtenha um construtor específico
Classe pai e interface dos pais
significado
getSuperclass ()
Obtenha a classe pai de uma determinada classe
getInterfaces ()
Obter uma interface para um certo tipo de implementação
Dessa forma, podemos obter vários conteúdos da classe e descompilar. Para um idioma como o Java que compila primeiro e depois é executado, o mecanismo de reflexão pode tornar o código mais flexível e mais fácil de implementar orientado a objetos.
5. Arquivos de configuração de reflexão mais tornam nosso programa mais flexível:
No estudo dos padrões de projeto, ao aprender fábricas abstratas, a reflexão é usada para ler mais convenientemente as seqüências de links de banco de dados, etc., então eu não entendi muito naquele momento, então copiei de acordo. Dê uma olhada no uso de arquivos de configuração de reflexão + no .net:
O arquivo de configuração usado naquele momento era o arquivo app.config, e o conteúdo estava no formato XML, e o conteúdo do banco de dados vinculado foi preenchido:
<figuration> <ppSettings> <add key = "" value = ""/> </appSettings> </figuration>
Como escrever reflexão:
Assembly.Load ("O nome da montagem atual"). CreateInstance ("O nome do espaço de nome atual". O nome da classe a ser instanciado);
Essa vantagem é que é fácil facilitar a transformação do banco de dados. para selecionar.
Obviamente, o mesmo é verdadeiro em Java, exceto que o arquivo de configuração aqui é .Properties, chamado de arquivo de propriedade. Leia o conteúdo nele através da reflexão. Dessa forma, o código é corrigido, mas podemos alterar o conteúdo do arquivo de configuração, o que torna nosso código muito mais flexível!
Para resumir, aprender a reflexão Java novamente e usá -lo de maneira flexível pode tornar nosso código mais flexível, mas também tem suas desvantagens, ou seja, usá -lo reduzirá o desempenho de nosso software e aumentará a complexidade, por isso também precisamos usá -lo com cuidado.
Espero que este artigo seja útil para a programação Java de todos.