Princípio: A reflexão Java pode obter o nome do atributo e então chamar um método da classe por meio de invocação.
Por exemplo, existe uma propriedade chamada userName, esta classe escreve um método chamado getUserName e o método getUserName é chamado por meio de invocação.
O código é o seguinte
Copie o código do código da seguinte forma:
importar java.lang.reflect.Field;
importar java.lang.reflect.Method;
importar java.util.HashMap;
importar java.util.Map;
classe pública ParameterBase
{
/**
* Obtenha campo de classe e mapa de valores
* @retornar
*/
mapa público<String, String> getClassInfo()
{
Map<String,String> camposAndValues = new HashMap<String, String>();
Campo [] campos = this.getClass().getDeclaredFields();
for(int i=0; i< campos.comprimento; i++)
{
Campo f = campos[i];
Valor da string = getFieldValue(this,f.getName()).toString();
camposAndValues.put(f.getName(),valor);
}
retornar camposAndValues;
}
private String getFieldValue (Proprietário do objeto, String fieldName)
{
return invocaMethod(proprietário, fieldName,null).toString();
}
/**
*
* Executar o método getField de um determinado Campo
*
* @param classe proprietária
* @param fieldName nome do atributo da classe
* Parâmetros @param args, o padrão é nulo
* @retornar
*/
Objeto privado invocaMethod (Proprietário do objeto, String fieldName, Object[] args)
{
Classe<?estende Objeto> classeproprietária = proprietário.getClass();
//nomedocampo ->Nomedocampo
String nomedométodo = nomedocampo.substring(0, 1).toUpperCase()+ nomedocampo.substring(1);
Método método = null;
tentar
{
método = proprietárioClass.getMethod("get" + nomedométodo);
}
capturar (SecurityException e)
{
//e.printStackTrace();
}
pegar (NoSuchMethodException e)
{
//e.printStackTrace();
retornar "";
}
//invoca getMethod
tentar
{
retornar método.invoke (proprietário);
}
pegar (Exceção e)
{
retornar "";
}
}
}
Escreva uma classe User que herda de ParameterBase e escreva um código de teste
Copie o código do código da seguinte forma:
classe pública Usuário estende ParameterBase
{
String nome_do_usuário;
String passWorld;
String pública getNomeUsuário()
{
retornar nome do usuário;
}
public void setUserName(String nome_do_usuário)
{
this.userName = nome do usuário;
}
String pública getPassWorld()
{
return passWorld;
}
public void setPassWorld(String passWorld)
{
this.passWorld = passWorld;
}
público estático void principal(String[] args)
{
Usuário você = novo Usuário();
u.passWorld = "123";
u.userName = "aaaaa";
System.out.println(u.getClassInfo().toString());
}
}
saída do programa
Copie o código do código da seguinte forma:
{passWorld=123, userName=aaaaa}