我目前正在尝试在我们的服务器上重做一些代码,这些代码是非常漂亮的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
初始化程序中的每个实现类中,它将自己的实例添加到列表中。但是,该解决方案存在两个问题:
我考虑的另一个解决方案是PacketKeeper
类有Map<Byte, Class<? extends PacketType>>
和并行Map<Class<? extends PacketType>, Byte>
。当然,我必须有一个更好,更漂亮的解决方案来解决我在Java语义中遇到的这个问题。重构这个长链初始化器的最佳方法是什么?