Принцип: отражение Java может получить имя атрибута, а затем вызвать метод класса посредством вызова.
Например, есть свойство userName, этот класс записывает метод getUserName, а метод getUserName вызывается посредством вызова.
Код выглядит следующим образом
Скопируйте код кода следующим образом:
импортировать java.lang.reflect.Field;
импортировать java.lang.reflect.Method;
импортировать java.util.HashMap;
импортировать java.util.Map;
общедоступный класс ParameterBase
{
/**
* Получить поле класса и карту значений.
* @возвращаться
*/
общедоступная карта<String, String> getClassInfo()
{
Map<String,String>fieldsAndValues = new HashMap<String, String>();
Поле [] поля = this.getClass().getDeclaredFields();
for(int i=0; i<fields.length; i++)
{
Поле f = поля[i];
Строковое значение = getFieldValue(this,f.getName()).toString();
fieldAndValues.put(f.getName(),value);
}
вернуть поляИзначения;
}
частная строка getFieldValue (владелец объекта, имя поля строки)
{
возврат вызоваМетод (владелец, имя поля, ноль). toString ();
}
/**
*
* Выполнить метод getField определенного поля.
*
* Класс владельца @param
* @param fieldName имя атрибута класса
* Параметры @param args, по умолчанию — ноль
* @возвращаться
*/
частный объект вызоваМетод (владелец объекта, строковое имя поля, объект [] args)
{
Класс <? расширяет объект> OwnerClass = Owner.getClass();
//ИмяПоля -> ИмяПоля
Строковое имя метода = имя_поля.подстрока(0, 1).toUpperCase()+ имя_поля.подстрока(1);
Метод метод = ноль;
пытаться
{
метод = OwnerClass.getMethod("get" + имя_метода);
}
улов (SecurityException e)
{
//e.printStackTrace();
}
поймать (NoSuchMethodException e)
{
// e.printStackTrace();
возвращаться "";
}
//вызываем метод getMethod
пытаться
{
вернуть метод.invoke(владелец);
}
поймать (Исключение e)
{
возвращаться "";
}
}
}
Напишите класс User, который наследуется от ParameterBase, и напишите тестовый код.
Скопируйте код кода следующим образом:
Пользователь публичного класса расширяет параметрBase
{
Строковое имя пользователя;
Строка passWorld;
публичная строка getUserName()
{
вернуть имя пользователя;
}
public void setUserName (String userName)
{
this.userName = имя пользователя;
}
публичная строка getPassWorld()
{
вернуть passWorld;
}
public void setPassWorld (String passWorld)
{
this.passWorld = passWorld;
}
public static void main(String[] args)
{
Пользователь u = новый пользователь();
u.passWorld = "123";
u.userName = "ааааа";
System.out.println(u.getClassInfo().toString());
}
}
вывод программы
Скопируйте код кода следующим образом:
{passWorld=123, userName=ааааа}