2009-09-27 111 views

回答

5

简答:在Java中没有办法做到这一点。 (你可以找出什么类叫你,但下面的长答案也适用于大多数情况。)

长答案:代码的神奇行为取决于它被调用的地方几乎总是一个坏主意。任何需要维护你的代码的人都会感到困惑,这会严重影响你重构的能力。例如,假设您意识到实例化对象的两个地方基本上具有相同的逻辑,所以您决定将常见位分解出来。惊喜!现在代码的行为有所不同,因为它正在从其他地方实例化。只需添加参数并修复呼叫者。从长远来看,这将节省您的时间。

1

拦截方法调用(包括构造函数)不改变大量现有的代码是Aspect-oriented programming的一件事。

退房AspectJ开始。使用AspectJ,你可以定义一个“切入点”来指定你想拦截某个对象或一组对象的构造函数调用(如果需要,使用通配符),并且在拦截代码(“advice”)中,您将获得方法上下文,其中包含有关调用方法和对象的信息。

您甚至可以使用AspectJ向对象添加字段来存储父引用而不修改其现有代码(这称为“简介”)。

+0

感谢您的输入,但向代码库添加更多库并不是我想要做的事情。我只希望用java来快速简单地解决这个问题。 – Andreas

+0

...它变成了Java!对不起,无法抗拒。祝你好运! – JoshJordan

3

如果您想知道调用类,则将“this”作为参数传递给构造函数。

Thing thing = new Thing(this); 

编辑:现代IDE允许重构将使这很容易做到。

+0

这也表明“事”是内部阶层的候选人。 – erickson

相关问题