2013-06-27 2 views
1

У меня есть объект, который имеет поле String. Я могу получить это поле по телефону:Как получить значение поля String из отражения Java?

Field field = someObj.getClass().getField("strField"); 

Я ПГТ метод Field#set(Object), для установки значения поля этого экземпляра, но соответствующий добытчик, кажется Field#get(Object), что это странно, потому что я бы ожидал, что это будет Field#get().

Как получить значение экземпляра strField?

ответ

7

, если вы используете java.lang.reflect.Field, «сеттер» - Field.set(Object,Object), а «получатель» - Field.get(Object). в случаях как, первый параметр - это экземпляр, по которому вы хотите получить доступ к полю.

+0

О, он, вероятно, говорит о 'java.lang.reflect.Field'. Хороший улов! – acdcjunior

+0

Вопрос @acdcjunior был помечен тегом 'reflection', поэтому' java.lang.reflect' - это первое, что приходит в голову (по крайней мере для меня: D). Какова была твоя другая догадка? – Pshemo

+0

@Pshemo Да, у меня раздался мозг. Я думал, что «Поле» - это класс 'someObj', а сеттеры для' Field.strField' - 'Field.set (Object)' и 'Field.get (Object)'. Его запись 'Field # set (Object)' (а не 'set (Obj, Obj)') сделало меня совершенно неверным. – acdcjunior

1

Самый простой способ заключается в использовании BeanUtils:

String s = BeanUtils.getProperty(someObj, "strField"); 

Обратите внимание, что BeanUtils попытается преобразовать вашу собственность в строку. У вас должен быть геттер и сеттер объекта

2

Даже без методов getter или setter для свойства вы можете изменить или получить значение, используя ссылку на объект и Java Reflection.

import java.lang.reflect.Field; 

public class Bean { 

    private String strField; 

    public static void main(String[] args) throws Exception { 
     Bean bean = new Bean(); 
     Field field = bean.getClass().getDeclaredField("strField"); 
     field.set(bean, "Hello"); 
     System.out.println(field.get(bean)); 
    } 

}