重构一长串硬编码引用的最佳方法是什么?

时间:2015-12-28 06:24:36

标签: java object hardcode

我目前正在尝试在我们的服务器上重做一些代码,这些代码是非常漂亮的Java硬编码混乱。服务器从用户接收一个字节操作码,然后是一些可变数量的大小。然后,服务器将通过读取存储在大型阵列中的操作码的任何数据包类型来处理此信息。以下是这个:

class Type {

    private static Type[] ids = new Type[256];

    static {
        type[0] = new SomeType();
        type[1] = new Another();
        type[2] = new SomeType4();
        // 254 more entries . . .
    }
}

我正在尝试寻找一种更自动化的方法。我的第一个想法是创建一个包含PacketType的抽象类public static final List<PacketType> packets。然后,在static初始化程序中的每个实现类中,它将自己的实例添加到列表中。但是,该解决方案存在两个问题:

  1. 相同的类初始化代码需要&#34;复制粘贴&#34;进入每个实施班。
  2. 这些类将以不可预测的顺序添加到列表中。客户端将不知道哪个数据包用作哪个字节代码。
  3. 我考虑的另一个解决方案是PacketKeeper类有Map<Byte, Class<? extends PacketType>>和并行Map<Class<? extends PacketType>, Byte>。当然,我必须有一个更好,更漂亮的解决方案来解决我在Java语义中遇到的这个问题。重构这个长链初始化器的最佳方法是什么?

0 个答案:

没有答案