【发布时间】:2018-10-01 02:02:21
【问题描述】:
对我来说,编码主要是为了清晰和概览。因此,我很想调用尚未在类的构造函数中分配的对象。听起来像一个愚蠢的想法,所以这里有一个例子(无论如何可能很愚蠢):
// this doesn't work but looks clear
SomeClass a = new SomeClass(b, c);
SomeClass b = new SomeClass(a, c);
SomeClass c = new SomeClass(a, b);
// this functions but has bad overview:
SomeClass a = new SomeClass(null, null);
SomeClass b = new SomeClass(a, null);
SomeClass c = new SomeClass(a, b);
a.first = b;
a.snd = c;
b.snd = c;
有没有更好的方法去底部的那个?
随着 halfedge 数据结构的实现,对这一点的需求上升,其中边缘对象存储对另一个边缘对象的 prev 和 next 引用。我认为循环引用并不好,但例如列表也对每个下一个项目都有这样的引用。
【问题讨论】:
-
这看起来像是设计中的一个严重缺陷。这些只是想法还是您有实际用例?
-
您能否更具体并详细说明您想要实现的目标是什么?这个问题至少对我来说不是很清楚!
-
也许您正在寻找依赖注入之类的东西(它不涵盖此特定场景,但通常此类依赖项依赖于其他人等)
-
@SaurabhRai
A的构造函数需要B的实例,但B的构造函数需要A的实例。他有循环依赖。 -
@BradleyUffner 确实如此,但在我使用过的所有 DI 框架中,它们真的非常讨厌循环依赖,而不仅仅是在构造函数注入中。