java - 类型层次结构+可选字段

标签 java design-patterns inheritance polymorphism

我正在研究一些Java,但我不太确定如何解决这个问题,至少不是没有我想避免的丑陋。我有一个父抽象类,比方说 Item。 Item 具有三个子类:ItemA(具体的)和另一个抽象类 ItemB(它本身具有两个具体的子类:ItemB1 和 ItemB2)。 ItemA 只是一个 stub ,如果 Item 本身可以变得具体,则可能不需要存在,但我不确定是否需要 stub ,具体取决于解决方案。所有这些都必须继承自 Item 或父接口(interface),因为它们将位于多个 Collection 中。

现在,我们有了这个项目层次结构。有趣的是,项目有一个可选的对象字段,假设它是一个名为“功能”的对象。任何具体类都可能具有功能对象,但有些类则不会。它需要存在于某些设备上,但不应该存在于其他设备上。我想避免将其放入 Item 中并始终进行空检查以查看它是否存在。这是可能的,但让我觉得有点难看。我认为将层次结构分成两个单独的树实际上也不可行,因为我很大程度上会用一条额外数据复制一堆类。

遇到这样的情况该怎么办?我最初想到使用装饰器,但这意味着每次我需要查看它是否具有“功能”字段时,都要疯狂地进行类型检查,看看它是否是“功能装饰项”或类似的内容,而且我已经做了一些类型检查来确定它是什么与 Item 的不同子类型有关。也许我只是对此吹毛求疵(我有时倾向于沉迷于小细节),或者也许有一个明显的解决方案,但我的 Nose 被堵塞了,但我希望我只是错过了一个模式或技术可以干净地实现这一点。

最佳答案

定义一个接口(interface)。有些类实现了该接口(interface),有些则没有。您可以使用 instanceof 来检查对象是否在运行时实现接口(interface)。

关于java - 类型层次结构+可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17480933/

相关文章:

c++ - 从相关类访问私有(private)成员数据

C++ 在多级继承的情况下对 vtable 的 undefined reference

c++ - C++ 中方法参数类型的静态自省(introspection)

java - URL 中有效图像的正则表达式

java - 抽象类的意义何在?

java - 获取内部包含 HTML 任务的节点文本

java - 谷歌分析平均 session 持续时间为 00 :00:00

用于操作 DOM API 的 Javascript 设计模式

sql - 空值与特殊的预定义空值

java - DAO 和连接