Principio: la reflexión de Java puede obtener el nombre del atributo y luego llamar a un método de la clase mediante invocación.
Por ejemplo, hay una propiedad llamada nombre de usuario, esta clase escribe un método llamado getUserName y el método getUserName se llama mediante invocación.
El código es el siguiente.
Copie el código de código de la siguiente manera:
importar java.lang.reflect.Field;
importar java.lang.reflect.Method;
importar java.util.HashMap;
importar java.util.Map;
Base de parámetros de clase pública
{
/**
* Obtener campo de clase y mapa de valores
* @devolver
*/
Mapa público<Cadena, Cadena> getClassInfo()
{
Map<String,String> camposAndValues = new HashMap<String, String>();
Campo [] campos = this.getClass().getDeclaredFields();
para(int i=0; i< campos.longitud; i++)
{
Campo f = campos[i];
Valor de cadena = getFieldValue(this,f.getName()).toString();
camposAndValues.put(f.getName(),valor);
}
devolver campos y valores;
}
cadena privada getFieldValue (propietario del objeto, nombre del campo de cadena)
{
return invokeMethod(propietario, nombre de campo, nulo).toString();
}
/**
*
* Ejecutar el método getField de un determinado Campo
*
* Clase de propietario @param
* @param fieldName nombre del atributo de la clase
* Parámetros @param args, el valor predeterminado es nulo
* @devolver
*/
Método de invocación de objeto privado (propietario del objeto, nombre del campo de cadena, argumentos del objeto [])
{
Clase<? extiende Objeto> propietarioClass = propietario.getClass();
//nombre del campo -> nombre del campo
Cadena nombre del método = nombre del campo.substring(0, 1).toUpperCase()+ nombre del campo.substring(1);
Método método = nulo;
intentar
{
método = propietarioClass.getMethod("obtener" + nombre del método);
}
captura (SecurityException e)
{
//e.printStackTrace();
}
captura (NoSuchMethodException e)
{
// e.printStackTrace();
devolver "";
}
//invocar getMethod
intentar
{
método de retorno.invoke(propietario);
}
captura (Excepción e)
{
devolver "";
}
}
}
Escriba una clase Usuario que herede de ParameterBase y escriba un código de prueba
Copie el código de código de la siguiente manera:
El usuario de clase pública extiende ParameterBase
{
Nombre de usuario de cadena;
Pase de cadenaMundo;
cadena pública getUserName()
{
devolver nombre de usuario;
}
setUserName público vacío (String nombre de usuario)
{
this.userName = nombre de usuario;
}
cadena pública getPassWorld()
{
pase de regresoMundo;
}
setPassWorld público vacío (String passWorld)
{
this.passWorld = passWorld;
}
principal vacío estático público (String [] argumentos)
{
Usuario u = nuevo Usuario();
u.passWorld = "123";
u.userName = "aaaaa";
System.out.println(u.getClassInfo().toString());
}
}
salida del programa
Copie el código de código de la siguiente manera:
{passWorld=123, nombre de usuario=aaaaa}