Если вы используете Spring Framework
, существует класс утилит с именем ReflectionUtils
. Вот способ вставить значение в приватное поле.
Согласно:
findField(Class<?> clazz, String name, Class<?> type)
и
setField(Field field, @Nullable Object target, @Nullable Object value)
Вы можете написать:
final Field field = ReflectionUtils.findField(Foo.class, "name", String.class)
ReflectionUtils.setField(field, targetObject, "theNewValue")
Это, конечно, не самый короткийМожно написать это, но это короче, чем базовые инструменты JDK, и я доверяю людям, которые разрабатывают Spring, поэтому я достаточно уверен.Просто убедитесь, что вы действительно нуждаетесь в рефлексии, прежде чем делать это.
Плюс, если это для целей тестирования, есть ReflectionTestUtils
, который также предоставляет вам несколько методов.
Вы найдете всев документах здесь
Надеюсь, это поможет.