Есть ли способ определить объект, вызывающий определенный метод в Java? - PullRequest
0 голосов
/ 17 марта 2012

Мне нужно иметь возможность идентифицировать Объект, который вызывает определенный метод.Поэтому, если, например, у меня есть следующее

    JLabel l = new JLabel("Hello");
    JLabel label = new JLabel("HELLO");
    label.setText("BYE");

, мне нужно иметь возможность определить, что объект в переменной label на самом деле вызывает setText, а не l.Мне удалось получить тип объекта, вызывающего метод, в данном случае JLabel, так как я использую SOOT, чтобы получить информацию о методе.Однако, что мне действительно нужно, так это объект, использующий этот метод.

Есть ли способ идентифицировать реальный объект, вызывающий метод?

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Да, вы можете найти, кто звонит, с помощью отражения. См. Этот пост переполнения стека: Как найти вызывающего метода, использующего Stacktrace или отражения? для получения дополнительной информации о том, как это сделать.

Тем не менее, я был бы обеспокоен тем, что вы пытаетесь сделать что-то гораздо сложнее, чем необходимо для достижения любой конечной цели, к которой вы стремитесь. Не могли бы вы передать «this» в качестве параметра для под-методов, которым необходимо знать, кто вызывает?

0 голосов
/ 17 марта 2012

Нет подходящего метода. Вы должны передать параметр в ваш метод, чтобы сказать ему, что делать, не пытайтесь анализировать стек.

...