Principe : la réflexion de Java peut obtenir le nom de l'attribut, puis appeler une méthode de la classe via Invoke.
Par exemple, il existe une propriété appelée userName, cette classe écrit une méthode appelée getUserName et la méthode getUserName est appelée via Invocation.
Le code est le suivant
Copiez le code comme suit :
importer java.lang.reflect.Field ;
importer java.lang.reflect.Method ;
importer java.util.HashMap ;
importer java.util.Map ;
classe publique ParameterBase
{
/**
* Obtenir le champ Classe et la carte de valeur
* @retour
*/
public Map<String, String> getClassInfo()
{
Map<String,String>fieldsAndValues = new HashMap<String, String>();
Champ [] champs = this.getClass().getDeclaredFields();
pour(int i=0; i< champs.longueur; i++)
{
Champ f = champs[i] ;
Valeur de chaîne = getFieldValue(this,f.getName()).toString();
fieldAndValues.put(f.getName(),value);
}
retourner les champs et les valeurs ;
}
chaîne privée getFieldValue (propriétaire de l'objet, chaîne fieldName)
{
return raiseMethod(owner, fieldName,null).toString();
}
/**
*
* Exécuter la méthode getField d'un certain Field
*
* Classe propriétaire @param
* @param fieldName nom d'attribut de la classe
* Paramètres @param args, la valeur par défaut est nulle
* @retour
*/
Objet privé InvoqueMethod (Propriétaire de l'objet, String fieldName, Object[] args)
{
Class<? extends Object> OwnerClass = Owner.getClass();
//NomChamp -> NomChamp
String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
Méthode méthode = null ;
essayer
{
method = OwnerClass.getMethod("get" + methodName);
}
attraper (SecurityException e)
{
//e.printStackTrace();
}
attraper (NoSuchMethodException e)
{
// e.printStackTrace();
retour "";
}
//invoque getMethod
essayer
{
return method.invoke(propriétaire);
}
attraper (exception e)
{
retour "";
}
}
}
Écrivez une classe User qui hérite de ParameterBase et écrivez un code de test
Copiez le code comme suit :
L'utilisateur de classe publique étend ParameterBase
{
Chaîne nom d'utilisateur ;
Chaîne passWorld ;
chaîne publique getUserName()
{
retourner le nom d'utilisateur ;
}
public void setUserName (String userName)
{
this.userName = nom d'utilisateur ;
}
chaîne publique getPassWorld()
{
retour passWorld ;
}
public void setPassWorld (String passWorld)
{
this.passWorld = passWorld;
}
public static void main (String[] arguments)
{
Utilisateur u = nouvel utilisateur ();
u.passWorld = "123" ;
u.userName = "aaaaa";
System.out.println(u.getClassInfo().toString());
}
}
sortie du programme
Copiez le code comme suit :
{passWorld=123, userName=aaaaa}