gpt4 book ai didi

java - 使用内部类来反射(reflect)真实事物的关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:18 24 4
gpt4 key购买 nike

这更像是一个概念性问题。我知道如何做我想做的事。不过,我想知道这样做是否正确。

我试图表现一些在现实生活中涉及一些嵌套的东西。它是一个文档,指定要使用一组项目执行的 Activity 。一个文档可能涵盖多个项目,每个项目可能有多个 Activity 。

因此层次结构将是文档 -> 项目 -> Activity 。

我目前的想法是表示这将是一个顶级类 Document,它包含一个内部类 ItemProgram,它本身包含一个内部类 Activity。是的,这是两层嵌套。

public class Document {

// Properties of the document itself

private Map<Item, ItemProgram> itemPrograms; // Map of item programs

public class ItemProgram {

// Properties of the item program itself

private List<Activity> activities; // List of activities

public class Activity {
// Properties of the activity
}
}
}

内部类必须是公共(public)的,但我将构造函数设为私有(private),这样它们只能通过外部类中的 add 方法创建。如您所见,我使用一种 Collection 类型存储实例。

这是解决这个问题的正确方法吗?双重嵌套?

在外部类中使用集合来存储对内部类所有实例的引用是否合适?

最佳答案

我明白您为什么想使用这个构造,但我不会选择它(当然没有绝对正确/错误的答案)。以下是一些需要考虑的事项:

内部类实例将有权访问其封闭对象的内部状态,这对于您的示例可能不是必需的,并且会使类紧密耦合。

以这种方式进行双重嵌套是“不寻常的”,可能会使阅读您代码的其他人感到困惑。

将来,如果您的系统设计发生变化并且可以独立于项目创建 Activity (例如),那么您将不得不在代码中进行一些大手术。

内部类的实例将通过对其父对象的隐式引用创建,你真的需要这个额外的引用吗( parent 已经通过私有(private)集合知道他们的 child ,是否必须是双向关系这增加了一定的复杂性)?

您是否考虑过这种设计会如何影响代码的可测试性?如果您想对 Activity 类进行单元测试怎么办 - 您能否以这样一种方式进行测试,即测试失败肯定表明 Activity 中存在问题,而不是在其中一个父类中?

关于java - 使用内部类来反射(reflect)真实事物的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12795112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com