【问题标题】:Should I use a nested enum?我应该使用嵌套枚举吗?
【发布时间】:2013-01-10 20:19:10
【问题描述】:

假设我需要一个涉及一组类别的 Java 数据结构,每个类别都有一组子类别。例如,假设主类别是“品牌”(例如产品),子类别是“产品”。我希望能够将品牌+产品的组合映射到一条数据,例如价格。

如果“品牌”和“产品”单独使用,我想使用枚举类型,因为

  • 品牌+产品只有一小部分相关数据(价格)

  • 我需要在一个相当大的程序中多次引用它们,所以我分配给它们的任何字符串字面键输入错误的可能性基本上是一个。

但是,品牌/产品的数量太大,无法为每个品牌/产品组合单个枚举(大约 20 个品牌,每个品牌有 10 个产品,以后很有可能添加更多)。我希望能够使用这样的结构:

    getPrice(APPLE.IPOD)

    getPrice(APPLE.MACBOOK)

    getPrice(HERSHEYS.PEANUT_BUTTER_CUPS)

我应该使用某种嵌套枚举吗?如果是这样,将如何实施?


奖励信息:我花了一些时间在谷歌上搜索“java 嵌套枚举”,但没有找到任何结果。像勾选答案here 或thelosts 的答案here 中的第一个这样的结构的问题是,我有太多的类别都表现出相同的行为,无法多次写出非常相似的枚举定义。

【问题讨论】:

    标签: java data-structures enums nested


    【解决方案1】:

    我不会为此使用枚举。

    我建议您从文件或数据库中加载此信息。 Java 不是存储大量数据的好地方。

    【讨论】:

      【解决方案2】:

      您可以向 Brand 枚举添加一个 getter 和 setter,以允许设置 Product 枚举,但这不会强制要求 Product 实际上是由该品牌制造的。此外,每个枚举值只有一个实例——因此您永远不可能拥有 APPLE.IPOD 和 APPLE.IPAD。您要么需要一个表示笛卡尔积的枚举类型,要么需要像 Peter Lawrey 建议的那样从数据存储中加载值。

      【讨论】:

        猜你喜欢
        • 2010-10-22
        • 2010-12-21
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多