我有一个包含2层,一个核心层和一个客户特定层的软件设置。核心层具有定义的常数,客户特定层应能够扩展这些常数。更详细:

public class CoreConstants
{
  public static long CORE_CONSTANT_1 = 1;
  public static long CORE_CONSTANT_2 = 2;
}


客户特定层应该能够添加仅在客户特定层中使用的常量。理念:

public class CustomerConstants extends CoreConstants
{
  public static long CUSTOMER_CONSTANT_1 = 1000; // starting range = 1000
}


有更通用的方法来处理此问题吗?

更多信息:继承的原因是定义客户特定常量的起始范围。在CoreConstants类中,我可以为客户特定的常量设置起始值。然后可以定义客户特定的常量,如下所示:

public static long CUSTOMER_CONSTANT_1 = customStartValue + 1;
public static long CUSTOMER_CONSTANT_2 = customStartValue + 2;

最佳答案

通常最好用enum代替整数常量,并且可以使用枚举上的接口来实现所需的功能。

interface CoreConstant {
    int intValue();
}

enum CoreConstants implements CoreConstant {
    CORE_CONSTANT_1(1),
    CORE_CONSTANT_2(2);
    private final int intValue;
    public CoreConstants(int intValue) { this.intValue = intValue; }
    public int intValue() { return intValue; }
}

interface CustomerConstant extends CoreConstant {}

enum CustomerConstants implements CustomerConstant {
    CUSTOMER_CONSTANT_1(1000);
    private final int intValue;
    public CustomerConstants(int intValue) { this.intValue = intValue; }
    public int intValue() { return intValue; }
}


您也许可以通过使用IntConstant类在枚举中使用委派来改进设计。不幸的是,您无法扩展枚举。结果是枚举类中有一些代码重复。

否则,如果要使用public static int模型,请使用接口而不是类,并最终确定常量。

interface CoreConstants {
    public static final int CORE_CONSTANT_1 = 1;
}

关于java - Java可扩展常数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8006696/

10-10 10:32