在java中,如何从构造函数获取实例化对象?
我想为一些GUI类存储对父对象的引用,以模拟事件冒泡-调用父处理程序-但我不想更改所有现有的代码。
发布于 2009-09-27 08:23:35
简而言之:在Java中无法做到这一点。(您可以找出哪个类调用了您,但下面的长答案在很大程度上也适用于此。)
长期答案:根据调用位置的不同,代码神奇地表现出不同的行为几乎总是一个糟糕的想法。这会让任何维护你的代码的人感到困惑,而且会严重伤害你的重构能力。例如,假设您意识到实例化对象的两个位置具有基本相同的逻辑,因此您决定提取公共部分。惊喜吧!现在代码的行为不同了,因为它是从其他地方实例化的。只需添加参数并修复调用者即可。从长远来看,这会节省你的时间。
发布于 2009-09-27 08:33:56
如果您想知道调用的类,那么将"this“作为参数传递给构造函数。
Thing thing = new Thing(this);编辑:允许重构的现代IDE将使这项工作变得非常容易。
发布于 2009-09-27 08:10:29
在不更改大量现有代码的情况下拦截方法调用(包括构造函数)是Aspect-oriented programming的目标之一。
首先,请查看AspectJ。
使用AspectJ,您可以定义一个“切入点”,指定您想要拦截某个对象或一组对象的构造函数调用(如果需要,可以使用通配符),在拦截代码(“建议”)中,您将获得方法上下文,其中包括有关调用方法和对象的信息。
您甚至可以使用AspectJ将字段添加到您的对象中,以存储父引用,而无需修改它们的现有代码(这称为“介绍”)。
https://stackoverflow.com/questions/1483075
复制相似问题