这种结构是否以某种方式无限递归?

时间:2015-03-29 05:22:13

标签: java arrays recursion

我还没有尝试实现这一点,因为我试图留在设计阶段'目前,但是我试图确定这种结构是否安全,或者是否会让我嘲笑:

terrible class diagram

换句话说,Student对象包含一个包含Subjects的数组,表示他们已注册/已完成的主题。主题包含正在进行主题的所有学生的数组。我担心以这种方式实现,Student中数组中的每个Subject都包含自己的Student数组,每个学生都包含自己的Subjects数组,无限制。

现在,我知道Java没有复制'这些对象,但我仍然担心这会产生无限多的对这些对象的引用,在我看来这几乎是一个坏主意? Java是我的第一个严肃的语言,我根本不熟悉内存管理。

编辑:我知道有更好的方法来做这个涉及桥对象。而且我知道它不会复制对象本身。我害怕的是复制级联引用本身。引用自己是否重复'以这种方式,它是否消耗任何内存以获得对同一对象的另一个引用?或者换句话说,编译器/程序在运行时是否尝试遵循'像这样的级联/循环链,或者它主要是不管它,除非像评论中提到的toString()这样的特定情况?

1 个答案:

答案 0 :(得分:2)

是否"无限递归"?不适用于递归概念的任何正常定义。是否会制作大量的参考文献?可能,如果执行得很差。此外,如果您从dB或其他商店加载,而不是缓存,您实际上可能会获得完整的对象,这可能是一个重大问题。

通常有一些方法可以解决这类问题。 首先,通常你会收集参考资料" lazy-load"越多越好。因此,举例来说,在访问学生资产之前,我不会为所有学生加载一个科目。同样地,除非访问主题属性,否则我不会为学生加载所有主题。通过这样做,这变得很难成为问题,因为代码对于所有意图都必须是恶意的才能制作大量的副本。 (在访问所有学生的主题和回到主题之间交替。)可以这样做。

其次,通常你会尝试尽可能少地使这些圈外依赖。我说尽可能少见,因为有时你建模的领域问题确实存在这种关系,而且代表它很重要。