Как стать автором
Обновить

Комментарии 6

Тема классная, подписался

Похоже это очень удобно, если ломаешь чужое приложение, надо подменить логику и вернуть результат так, чтобы другой код ничего не заподозрил)

Я крайне не рекомендую использовать arrayCast где бы то ни было, ведь почти любое взаимодействие приведённого объекта с методами вызывает жёсткое падение виртуальной машины. Единственный найденный мной способ хотя бы вернуть их - положить в массив (что и сделано в статье). Реальное практическое применение, это кратковременный (когда иначе просто неполучится) доступ к полям ОЧЕНЬ хорошо исследованных объектов. В следующей статье надеюсь написать о технике, что даст полный доступ ко всем полям и методам (и даже статичечкому конструктору) в нормальном виде, а не через эти костыли.

Из серии: "А что так можно было?". Ждём продолжения.)

Статья понравилась, спасибо!

для изменения private final поля, чего нельзя сделать с помощью обычной рефлексии

На самом деле private final поле легко меняется с помощью обычной рефлексии:

1) Находится нужное поле field типа java.lang.reflect.Field

2) field.setAccessible(true);

3) field.set(<объект_у_которого_меняем_значение_поля>, <новое_значение>);

---

p.s. именно так и делает PowerMock, например

Согласен, коряво написал. Я имел ввиду, что рефлексией не всегда можно получить поля у системных классов. На своём то тестовом в любом случае получится

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории