Ответ 1
Похоже, вам нужна ссылка на экземпляр класса. Вы бы хотели называть get и передать ссылку, возвращая String.
Вы можете использовать get следующим образом:
String strValue = (String) field.get (objectReference);
У меня есть метод:
public void extractStringFromField(Class<?> classToInspect) {
Field[] allFields = classToInspect.getDeclaredFields();
for(Field field : allFields) {
if(field.getType().isAssignableFrom(String.class)) {
System.out.println("Field name: " + field.getName());
// How to get the actual value of the string?!?!
// String strValue = ???
}
}
}
Когда это выполняется, я получаю вывод, например:
Field name: java.lang.String
Теперь, как извлечь фактическое значение строки в strValue
, с помощью отражения?
Похоже, вам нужна ссылка на экземпляр класса. Вы бы хотели называть get и передать ссылку, возвращая String.
Вы можете использовать get следующим образом:
String strValue = (String) field.get (objectReference);
В идеальных ситуациях Class
не хранит данные. Он просто содержит информацию о структуре и поведении своих экземпляров, а экземпляры Classes
содержат ваши данные для использования. Таким образом, ваш метод extractStringFromField
не может извлекать значения, если вы не передадите какие-либо экземпляры (откуда они будут фактически извлекать значения).
Если имя параметра ссылки, вы передаете для извлечения значение instance
, то вы можете легко получить то, что хотите, как показано ниже:
String strValue = (String)field.get(instance);
Просто используйте код примера для полей отражения:
Field[] fields = InsanceName.getDeclaredFields();
for (Field field : fields) { //array for fields names
System.out.println("Fields: " + Modifier.toString(field.getModifiers())); // modyfiers
System.out.println("Fields: " + field.getType().getName()); //type var name
System.out.println("Fields: " + field.getName()); //real var name
field.setAccessible(true); //var readable
System.out.println("Fields: " + field.get(InsanceName)); //get var values
System.out.println("Fields: " + field.toString()); //get "String" values
System.out.println(""); //some space for readable code
}