我有一个软件设置,包括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;
答案 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() {
}
}