Получение локальных переменных вызывающего метода

#java #methods #local

#java #методы #Местные новости

Вопрос:

Я работаю с библиотекой на Java и столкнулся со следующей проблемой, допустим, у меня есть:

 public void methodA(ObjectA o1, ObjectB o2)
{
    //Code 
    Object o3 = new ObjectA();
    methodB(o3);
}
public void methodB(ObjectA o3)
{
    //Code
}
  

Я не могу изменить метод A или параметры метода B, но я могу изменить тело B, а также классы объектов A и B, мне нужен способ получить значение o1 из метода B.

Насколько я понимаю, JVM хранит локальные переменные во фреймах стека в стеке вызовов (требуется подтверждение), поэтому я подумал, что, возможно, есть способ использовать Java или C (или другой язык, если это действительно необходимо) для получения значений, все это гипотетически, я на самом деле сейчас не знаюесли это возможно.

Я также открыт для новых идей и возможностей, которые не связаны с такими вещами.

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

1. Это абсолютно невозможно в Java и должно быть на большинстве языков, если не на всех языках: кто сказал, что methodA это единственная функция, которая может вызывать methodB , или что все места, которые могут вызывать methodB , будут иметь o1 ?

2. Нет, это не единственное место, где он вызывается, и именно это затрудняет его, иначе я бы просто использовал ASM для его прямой модификации, но o1 всегда будет присутствовать.

Ответ №1:

Я думаю, что это невозможно сделать, так как вся информация o1 будет находиться внутри ее собственного объекта. Вероятно, вам придется изменить свое мышление по этому вопросу. Единственный способ — использовать статическую общую переменную, разделяемую между всеми классами, но вам все равно нужно будет изменить конструктор methodA или ObjectA, чтобы он вводил все, что вам нужно, в общедоступную переменную.

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

1. В любом случае спасибо за помощь, я ценю интерес