首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当存在大量常量时,定义常量的正确方式是什么?

当存在大量常量时,定义常量的正确方式是什么?
EN

Stack Overflow用户
提问于 2019-06-18 16:52:50
回答 1查看 182关注 0票数 7

我正在编写一些代码,其中有大量的常量需要定义。它主要处理Marketplace常量(可以是美国、英国、印度、日本)和关联的MarketplaceMerchantMapping,它基本上将MerchantID映射到MarketplaceID

例如:

代码语言:javascript
复制
public enum Marketplace {

    US("US"),
    JP("JP"),
    UK("UK"),
    IN("IN"),
    NZ("NZ"),
    CA("CA"),
    FR("FR"),
    ... 
    ...

  // This could go up to some 400 marketplaces

    private final String stringValue;

    public boolean isWest() {
        return this == US || this == CA || this == UK;
    }

    public boolean isEast() {
        return this == IN || this == NZ || this == JP;
    }

}
代码语言:javascript
复制
public enum MarketplaceMerchantMapping {

    USMAP(MarketplaceID.US, MerchantID.US, Marketplace.US),
    JPMAP(MarketplaceID.JP, MerchantID.JP, Marketplace.JP),
    UKMAP(MarketplaceID.UK, MerchantID.UK, Marketplace.UK),
    NZMAP(MarketplaceID.NZ, MerchantID.NZ, Marketplace.NZ),
    INMAP(MarketplaceID.IN, MerchantID.IN, Marketplace.IN),
    CAMAP(MarketplaceID.CA, MerchantID.CA, Marketplace.CA),
    FRMAP(MarketplaceID.FR, MerchantID.FR, Marketplace.FR),
    ...
    ... 

   // THis can go up to 400 Marketplaces * Number of merchantIds in each marketplace.


}

还有其他类似的常量,类似地定义为枚举或静态常量。

这确实是不可伸缩的,因为每次我们添加对新的Marketplace和Merchants的支持时,我们都需要更新一大堆文件并对其进行测试,而这些配置更改本身就占用了大量的开发人员时间。

理想情况下,我想知道是否有一些方法可以在一些配置文件中定义这些常量,并读取这些文件来创建常量。有没有办法通过读取和解析一些配置文件来创建这样的枚举常量?

因此,如果我有一个包含以下条目的配置文件:

ConfigFile.cfg:

代码语言:javascript
复制
WestMarketplaces = ("US", "AG", "MX", "CA", ...) // Expand this later as required
EastMarketplaces = ("IN", "AU", "SG", "JP", ...) // Expand this later as required
EUMarketplaces = ("UK", "FR", "SP", ...) // Expand this later as required

WestMerchantIds = ("WA", "WB", "WC", "WD", ...) // Expand this later as required
WestMerchantIds = ("EA", "EB", "EC", "WD", ...) // Expand this later as required
EUMerchantIds = ("EUA", "EUB", "EUC", "WDD", ...) // Expand this later as required

marketplaceMerchantMapping = {
  "US" = "WA";
  "CA" = "WB";
  "MX" = "WC";
  "AU" = "EA";
  "IN" = "EB";
  "JP" = "EC";
  "UK" = "EUA";
  "FR" = "EUB";
...
} // Expand this later as required

那么,它可以从配置文件中读取这些常量并构建适当的枚举或静态常量吗?

这有可能做到吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-18 17:04:43

如果您只想以一种更具可读性的方式编写枚举,您可以为它们添加一个属性:

代码语言:javascript
复制
public enum Marketplace {
     US("US", false, true),
     JP("JP", true, false),
     UK("UK", false, true),
     IN("IN", true, false),
     NZ("NZ", true, false),
     CA("CA", false, true),
     FR("FR", false, false);

     // This could go uptp some 400 marketplaces

     private final String stringValue;

     /** Markers for the getters */
     private final boolean isWest, isEast;

     Marketplace(String stringValue, boolean isEast, boolean isWest) {
         this.stringValue = stringValue;
         this.isEast = isEast;
         this.isWest = isWest;
     }

     public boolean isWest() {
         return isWest;
     }

     public boolean isEast() {
         return isEast;
     }
}

从技术上讲,如果您将其设置为枚举的属性,则可以轻松地将它们保存在数据库中。如果您没有可用的数据存储,则必须在源代码中维护它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56645234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档