2012-03-17 57 views
0

我需要能够识别调用特定方法的对象。所以,如果例如我有以下有没有一种方法来确定在java中调用特定方法的对象?

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

我需要能够识别变量标签的对象实际上是调用的setText而不是湖 我设法得到了调用方法的对象的类型,在本例中是JLabel,因为我使用SOOT来获取方法信息。然而我实际需要的是使用这种方法的对象。

有没有办法能够识别调用该方法的实际对象?

+1

最终目标是什么? – 2012-03-17 17:01:17

+0

我需要获取GUI组件调用某些方法并操作它们...例如更改标签中文本的颜色...但不是所有方法调用或对象,我从SOOT输出获得的方法 – ict1991 2012-03-17 17:05:54

+0

根本的问题是,对象不会调用方法。 *方法调用*可能在某个对象内(这可能是你的意思),但没有一个体面的方式来获取它(除非有一些非常糟糕的调用堆栈转储调查;可能对调试非常有用,但绝对不适用于生产码)。 – 2012-03-17 17:13:17

回答

0

没有合适的方法。你应该传递一个参数给你的方法,告诉它该做什么,不要去嗅探堆栈。

+0

我无法修改具有GUI的系统的代码......我的系统必须与此给定的系统一起工作,因为 – ict1991 2012-03-17 17:09:50

+0

这没有意义。您正在修改此方法。 – bmargulies 2012-03-17 17:14:14

+0

@ ict1991挂钩你不能修改的代码(即子类和覆盖)。 – Java42 2012-03-17 17:15:57

3

是的,你可以通过反射找到谁在打电话。看到这个堆栈溢出帖子:How do I find the caller of a method using stacktrace or reflection?有关如何做到这一点的更多信息。

但是,我会担心你试图以一种更困难的方式去做某件事,而不是实现你所追求的最终目标。你能否将“this”作为参数传递给需要知道谁在呼叫的子方法?

+0

我正在构建一个工具,需要知道有关另一个系统的信息,这是另一个系统的信息,因此我无法以任何方式修改系统 – ict1991 2012-03-17 17:18:10

+0

会尝试反思,让你知道我是如何管理的...感谢信息 – ict1991 2012-03-17 17:23:38

+0

你是否熟悉反思? – 2012-03-17 17:25:31

相关问题