java - 针对 Java 整数常量扩展提出适当的设计建议

标签 java arrays enums

如果之前有人问过这个问题,我很抱歉,但我需要一个好的建议来解决下一个设计问题:

任务:鉴于我们有一个使用给定类型集的数据进行操作的基本服务,我们需要为具有扩展类型集的该服务设计扩展支持。

糟糕的解决方案:

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/

相关文章:

arrays - 如何将映射函数应用于 Kotlin 中的数组并更改其值?

c++ - 如何声明一个 std::map 以枚举为键,以不同签名为值的函数?

java - 根据对象属性决定返回哪个 Enum

c# - 定义带有描述的 C# 枚举

java - 如何将 Java 中的 SortedSet 转换为 Scala 中的 Seq

Java Toolkit 屏幕分辨率偏差

java - 验证套接字正在关闭

javascript - 构造函数变量的打印名称

javascript - 如何使用 jQuery 根据数组中的单词检查文本字段值?

java - 命名异常 : Cannot create resource instance with Jackrabbit in Tomcat