Комментарии 6
Тема классная, подписался
Похоже это очень удобно, если ломаешь чужое приложение, надо подменить логику и вернуть результат так, чтобы другой код ничего не заподозрил)
Я крайне не рекомендую использовать arrayCast где бы то ни было, ведь почти любое взаимодействие приведённого объекта с методами вызывает жёсткое падение виртуальной машины. Единственный найденный мной способ хотя бы вернуть их - положить в массив (что и сделано в статье). Реальное практическое применение, это кратковременный (когда иначе просто неполучится) доступ к полям ОЧЕНЬ хорошо исследованных объектов. В следующей статье надеюсь написать о технике, что даст полный доступ ко всем полям и методам (и даже статичечкому конструктору) в нормальном виде, а не через эти костыли.
Из серии: "А что так можно было?". Ждём продолжения.)
Статья понравилась, спасибо!
для изменения private final поля, чего нельзя сделать с помощью обычной рефлексии
На самом деле private final поле легко меняется с помощью обычной рефлексии:
1) Находится нужное поле field типа java.lang.reflect.Field
2) field.setAccessible(true);
3) field.set(<объект_у_которого_меняем_значение_поля>, <новое_значение>);
---
p.s. именно так и делает PowerMock, например
Небезопасный android часть 1: эксперименты с sun.misc.Unsafe