#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. В любом случае спасибо за помощь, я ценю интерес