我有一个包含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/