Java可扩展常量

时间:2011-11-04 08:40:55

标签: java inheritance constants

我有一个软件设置,包括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;

2 个答案:

答案 0 :(得分:3)

整数常量通常更好地替换为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 model,那么使用一个接口而不是一个类,并最终确定常量。

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

答案 1 :(得分:1)

没有理由在这两个类之间建立继承机制。继承用于多态,此处只有静态成员。只有两个单独的类。我甚至会让它们成为最终且不可实例化的:

public final class CoreConstants { 
    /**
     * Private constructor to prevent unnecessary instantiations
     */
    private CoreConstants() {
    }
}