0

我这里有一个 Java 问题。我有很多常量,它们是连续的常量整数,目前定义如下:

interface Flags {
  static final short A = 0;
  static final short B = A + 1;
  static final short FIRST_USER_FLAG = B + 1;
}

你们中的许多人现在会推荐我使用 Enum。问题是,我需要不止一个地方有这些标志。所以它会像:

interface CustomFlags {
  static final short USER_A = Flags.FIRST_USER_FLAG + 1;
  static final short USER_B = USER_A + 1;
}

您在此处看到的代码也必须在网络的两侧相同,包括在服务器代码和客户端代码中。它们之间的每条消息都定义了它的标志,并且通过这个标志,网络创建了使用这个标志注册的消息对象。这似乎不是最好的方法,但我想不出更好的方法。问题是,网络代码有自己的标志和消息,它们执行一些基本的身份验证和握手。然后必须有使用网络的代码定义的消息(及其标志)。

我的问题是,如何使它更易于维护和阅读?此外,如果有人知道发送和重新创建消息的更好方法(我同时使用 TCP 和 UDP,取决于消息),我将非常感激听到它。

如果有什么我没有解释的,请告诉我,我会补充的。

PS:对不起我的英语不好,因为我不是母语人士。

4

2 回答 2

1

我会保持原样。这是定义协议常量的常用技术。如果对等点不是 Java,我可能会进一步“去工程化”,直接定义名称和它们的值,而不用担心算术。你不希望它很容易改变,你实际上希望它不可能改变,这样就不会无意间出现协议不兼容性。枚举适用于你对名称和类型安全更感兴趣的情况,并且不太关心实际值,序数等。

于 2012-11-18T11:52:25.993 回答
0

枚举仍然是答案。您可以专门列出一个值,或者将枚举放在服务器和客户端通用的接口文档中,或者您可以简单地要求各个区域的值相同。IE,

public enum Flags
{
  short A (0);
  short B (1);
  short FIRST_USER_FLAG (2);
  private int value;

  private Flags(int value) {
      this.value = value;
  }
}

然后指定枚举必须在服务器和客户端上都满足该标准。如果需要,您可以向服务器提供枚举。

于 2012-11-18T11:40:01.057 回答