如果之前有人问过这个问题,我很抱歉,但我需要一个好的建议来解决下一个设计问题:
任务:鉴于我们有一个使用给定类型集的数据进行操作的基本服务,我们需要为具有扩展类型集的该服务设计扩展支持。
糟糕的解决方案:
class BaseServiceType {
public static final int TYPE_A = 0;
public static final int TYPE_B = 1;
public static final int LAST_USED_BASE_TYPE_INDEX = TYPE_B;
}
及其扩展
class ExtendedServiceType extends BaseServiceType {
public static final int TYPE_E = LAST_USED_BASE_TYPE_INDEX + 1;
public static final int TYPE_F = LAST_USED_BASE_TYPE_INDEX + 2;
}
我的任务相当简单,只有一个扩展。我并不是试图通过多个独立扩展来解决更普遍的问题。
我有一种感觉 enum
可以在这里工作,但不知道它是否可行。
最佳答案
一种解决方案是动态构建 ids。类初始化是线程安全的,因此您可以执行此操作。
class BaseServiceType {
protected static int id = 0;
public static final int TYPE_A = id++;
public static final int TYPE_B = id++;
}
及其扩展
class ExtendedServiceType extends BaseServiceType {
public static final int TYPE_E = id++;
public static final int TYPE_F = id++;
}
class AlsoExtendedServiceType extends BaseServiceType {
public static final int TYPE_X = id++;
public static final int TYPE_Y = id++;
}
唯一的问题是类的初始化顺序改变了 id。如果这很重要,您需要按照您需要的顺序访问这些类。
关于java - 针对 Java 整数常量扩展提出适当的设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20856176/