CARDÁPIO

Reflexão Java facilitada

índice

Reflexão Java facilitada

JavadereflexãoApresentando uma classe utilitária que permite usar facilmente a API.

O que é reflexão?

API de reflexãodentes,"java.lang.reflect”incluído no pacote,
Esta é uma API que recupera informações como campos e métodos de classes Java.
As seguintes classes são usadas principalmente.

  • java.lang.Class
  • java.lang.reflect.Constructor
  • java.lang.reflect.Method
  • java.lang.reflect.Field

reflexãoUsando , você pode criar classes ou chamar métodos sem precisar codificá-los diretamente.
Você pode criar uma instância de classe a partir de uma string ou executar um método.

Ao escrever as definições de nomes de classes e métodos em arquivos externos, como XML, você pode adaptar dinamicamente o aplicativo às mudanças no ambiente durante o tempo de execução.
É também uma API muito eficaz para construir aplicações altamente flexíveis.


Objetivo da reflexão

reflexãomuitas vezes não é usado diretamente pelos usuários,
É amplamente utilizado em aplicações web como Struts e estruturas como mapeamento O/R.

Por exemplo, ao configurar automaticamente os dados de entrada da tela da web para propriedades JavaBeans,
É usado ao emitir SQL que atualiza automaticamente com base nas propriedades JavaBeans.

Além disso, estão disponíveis funções como carregamento dinâmico e registro de plug-ins que ampliam a funcionalidade quando o aplicativo é iniciado.reflexãoIsso pode ser facilmente alcançado usando .

Executando a amostra

Execute o exemplo e experimente a programação semelhante a uma estrutura.

Aqui usamos a seguinte classereflexãoDemonstra um uso simples do utilitário.

Principal.java...Classe a ser executada
BeanUtil.java... Classe de utilidade de reflexão
FreeSoft.java...Usado como reflexão em uma classe que representa software livre.

●Quando executado normalmente

Sistema.out.println(“>>>Caso normal”);
FreeSoft freeSoft = new FreeSoft();
freeSoft.setName(“Chat&Messenger Chat e Messenger!!”);
freeSoft.showName();
freeSoft.showPrice(0);

●Quando executado usando reflexão

Sistema.out.println(“>>>Ao usar reflexão”);
//Cria uma instância da classe FreeSoft
Objeto invocarObject = BeanUtil.newInstance(“FreeSoft”);
//Defina o valor no campo nome.
BeanUtil.setProperty(invokeObject, "nome" , “Bate-papo e Messenger Bate-papo e Messenger !!”);
// Executa o método showName() do FreeSoft.
BeanUtil.invoke(invokeObject, “mostrarNome”, nulo);
// Executa o método showPrice() do FreeSoft.
// Se o método tiver argumentos, eles devem ser passados como um array do tipo Object.
BeanUtil.invoke(invokeObject, “mostrar preço”,novo Objeto[]{novo Inteiro(0)});

●Resultado da execução

Os resultados da execução são os mesmos tanto no caso normal quanto no uso da reflexão.

>>> Caso normal

Nome do software: Chat&Messenger Bate-papo e mensageiro! !

Preço: 0 ienes

>>> Ao usar reflexão

Nome do software: Chat&Messenger Bate-papo e mensageiro! !

Preço: 0 ienes

Detalhes do método BeanUtil

novaInstância

objeto estático público novaInstância(String className) lança exceção
Gera e retorna uma instância da string "className".

Parâmetros:
nome da classe – Nome de classe totalmente qualificado
Valor de retorno:
Uma nova instância de um nome de classe totalmente qualificado
exceção:
Exceção

novaInstância

objeto estático público novaInstância(String className, Object[] argObj) lança exceção
Gera e retorna uma instância da string "className".

Parâmetros:
nome da classe – Nome de classe totalmente qualificado
argObj – Argumentos do construtor
Valor de retorno:
Uma nova instância de um nome de classe totalmente qualificado
exceção:
Exceção

novaInstância

objeto estático público novaInstância(Classe clazz) lança exceção
Gera e retorna uma instância da classe "clazz".

Parâmetros:
clazz - aula
Valor de retorno:
nova instância de clazz
exceção:
Exceção

novaInstância

objeto estático público novaInstância(Classe clazz, Object[] argObj) lança exceção
Gera e retorna uma instância da classe "clazz".

Parâmetros:
clazz - aula
argObj – Argumentos do construtor
Valor de retorno:
nova instância de clazz
exceção:
Exceção

definirPropriedade

vazio estático público definirPropriedade(Objeto invocarObject, String fieldName, valor do objeto) lança exceção
Chame o método setter do campo “fieldName” do objeto “invokeObject” e armazene o valor “value”.

Se não houver método setter, o valor será definido diretamente no campo. Porém, neste caso, o modificador de acesso da propriedade alvo deve ser público.

Parâmetros:
invocarObject – Objeto a ser executado
campoNome – Nome da propriedade do objeto a ser executado
valor – Valor a definir
exceção:
Exceção – Ocorre a seguinte exceção.
InvocaçãoTargetException – Se o método subjacente lançar uma exceção
Exceção de acesso ilegal – Este objeto Método é Java
Quando o controle de acesso ao idioma é implementado e o método subjacente não pode ser acessado
NoSuchMethodException – Se um método com o nome especificado não for encontrado

obterPropriedade

objeto estático público obterPropriedade(Objeto invocarObject, String fieldName) lança exceção
Chama o método getter do campo fieldName do objeto invocaObject para obter o valor.
Se não houver método getter, o valor será recuperado diretamente do campo. Porém, neste caso, o modificador de acesso da propriedade alvo deve ser público.

Parâmetros:
invocarObject – Objeto a ser executado
campoNome – Nome da propriedade do objeto a ser executado
Valor de retorno:
Valor de retorno do método getter
exceção:
Exceção – Ocorre a seguinte exceção.
InvocaçãoTargetException – Se o método subjacente lançar uma exceção
Exceção de acesso ilegal – Este objeto Método é Java
Quando o controle de acesso ao idioma é implementado e o método subjacente não pode ser acessado
NoSuchFieldException – Se um campo com o nome especificado não for encontrado

invocar

objeto estático público invocar(Objeto invocaObject, String callMethod, Object[] argObjects) lança InvocationTargetException, IllegalAccessException, NoSuchMethodException
Executa o método "callMethod" do objeto "invokeObject".
Se houver um valor de retorno, ele poderá ser obtido como um Objeto.

Parâmetros:
invocarObject – Objeto a ser executado
método de chamada – Nome do método a ser executado
argObjects – Se houver argumentos, passe-os como um array de objetos. Se não houver argumentos, passe nulo.
Valor de retorno:
Valor de retorno da execução de "callMethod"
exceção:
InvocaçãoTargetException – Se o método subjacente lançar uma exceção
Exceção de acesso ilegal – Este objeto Método é Java
Quando o controle de acesso ao idioma é implementado e o método subjacente não pode ser acessado
NoSuchMethodException – Se um método com o nome especificado não for encontrado

encontrarMetodo

método estático público encontrarMetodo(Objeto invocarObject, String callMethod, Object[] argObjects) lança NoSuchMethodException
Procure o método 'callMethod' do objeto 'invokeObject'.

Parâmetros:
invocarObject – Objeto a ser executado
método de chamada – Nome do método do objeto a ser executado
argObjects – Se houver argumentos, passe-os como um array de objetos. Se não houver argumentos, passe nulo.
Valor de retorno:
Um objeto Method que corresponde às condições de argumento especificadas
exceção:
NoSuchMethodException – Se nenhum método correspondente for encontrado ou se o nome for “” ou “”

setField

vazio estático público setField(Objeto invocarObject, String fieldName, valor do objeto) lança IllegalAccessException, NoSuchFieldException
Armazena o valor “value” no nome do campo “fieldName” do objeto a ser executado “invokeObject”.

Parâmetros:
invocarObject – Objeto a ser executado
campoNome – Nome do campo do objeto a ser executado
valor – Valor a definir
exceção:
Exceção de acesso ilegal – O campo no qual o objeto especificado se baseia (ou sua subclasse ou implementador)
não é uma instância da classe ou interface que declara ou se a conversão de desembrulhamento falhar
NoSuchFieldException – Se um campo com o nome especificado não for encontrado

getField

objeto estático público getField(Objeto invocarObject, String fieldName) lança IllegalAccessException, NoSuchFieldException
Obtém o valor do nome do campo "fieldName" do objeto a ser executado "invokeObject".

Parâmetros:
invocarObject – Objeto a ser executado
campoNome – Nome do campo do objeto a ser executado
Valor de retorno:
valor de retorno
exceção:
Exceção de acesso ilegal – O campo no qual o objeto especificado se baseia (ou sua subclasse ou implementador)
não é uma instância da classe ou interface que declara ou se a conversão de desembrulhamento falhar
NoSuchFieldException – Se um campo com o nome especificado não for encontrado

hasField

público estático booleano hasField(Objeto objeto, String fieldName) lança exceção
Verifica se o objeto 'object' declara o nome do campo 'fieldName'.

Parâmetros:
objeto – Objeto a ser inspecionado
campoNome – Nome do campo a verificar
Valor de retorno:
verdadeiro se declarado
exceção:
Exceção

getAllFields

java.util.TreeSet público estático getAllFields(Objeto objeto) lança exceção
Parâmetros:
objeto
Valor de retorno:
exceção:
Exceção

getShortClassName

String estática pública getShortClassName(Objeto objeto)
Obtém o nome de classe não qualificado de um objeto.

Parâmetros:
objeto
Valor de retorno:

getShortClassName

String estática pública getShortClassName(String nomedaclasse)
Obtém o nome da classe a partir do nome totalmente qualificado.

Parâmetros:
nome da classe
Valor de retorno:

getFieldName

String estática pública getFieldName(String nome do método)
Altere o nome do campo do nome do método. Deve estar em conformidade com as convenções JavaBeans.

Parâmetros:
nome do método
Valor de retorno:

isClassExist

público estático booleano isClassExist(String nomedaclasse)
Verifica se o nome completo "className" é um nome de classe existente.

Parâmetros:
nome da classe
Valor de retorno:

getPropertyDescriptors

PropertyDescriptor público estático[] getPropertyDescriptors(Objeto objeto) lança IntrospectionException
Retorna um PropertyDescriptor que contém informações de objeto para "objeto".

Parâmetros:
objeto
Valor de retorno:
exceção:
java.beans.IntrospectionException

Código-fonte BeanUtil

  • URLをコピーしました!
índice