java - 根据枚举输入返回类

标签 java class input constructor enums

我有一个为游戏服务器运行的套接字网络。为了简化相互发送数据的过程,我想使用枚举作为构造函数的输入,并使用基于该枚举值的构建方法。

例如,我有一个枚举:

enum DataType {
    connectPlayer,
    returnServerState;
}

现在我有一个名为 BuildData 的构造函数:

private DataType dataType;

public BuildData(DataType dataType) {
    this.dataType = dataType;
}

我的问题是:我希望能够根据数据类型使用具有不同输入的构建方法。

例如,如果我有数据类型“connectPlayer”,我想要一个具有以下输入的构建方法:

public String build(String UUID, String server) {
    return "connectPlayer:" + UUID + ":" + server;
}

但是,当DataType为returnServerState时,我希望它是这样的:

public String build(String thisServer, String serverState) {
    return "setServerState:" + thisServer + ":" + serverState;
}

冒号放在中间,这样我就可以对它们使用 split 方法。

我的问题是:我是否必须根据包含正确方法的枚举类型返回一个类实例,或者是否有更简单的方法来执行此操作?

谢谢!

最佳答案

如果您的所有 build 方法只是参数数量不同,但具有相同的参数类型和相同的返回类型,您可以使用接受 varargs 的方法,像这样:

String build(String... args)

此外,您应该看看 enum API ,因为 java 枚举不仅仅可以枚举值。

您可以按如下方式扩展枚举:

enum DataType {
  connectPlayer {
    @Override
    public String build(String... args) {
      if (args.length != 2) throw new IllegalArgumentException("wrong number of arguments");
      String UUID = args[0];
      String server = args[1];
      return "connectPlayer:" + UUID + ":" + server;
    }
  },
  returnServerState {
    @Override
    public String build(String... args) {
      // do something else here...
      return "returnServierStateArgs " + Arrays.toString(args);
    }
  };

  public abstract String build(String... args);
}

用法:

System.out.println(DataType.connectPlayer.build("first", "second"));
System.out.println(DataType.returnServerState.build("first", "second", "...", "more"));

// prints:
// connectPlayer:first:second
// returnServierStateArgs [first, second, ..., more]

或者,您可以创建一个接口(interface)并为不同的DataType实现它。

interface Builder {
  String build(String... args);
}

关于java - 根据枚举输入返回类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30085072/

相关文章:

具有返回类型的 Java 继承方法

Java 覆盖 Android 中的 XML?

java - 计算矩阵指数的乘法和

java - JavaFx 中各阶段之间的通信(使用 *.fxml)

c++ - C++ 类中的构造函数

javascript - 如何获取单选按钮的文本(而不是值)

c++ - 从另一个类访问变量(在 C++ 中)

c# - 类嵌套和访问修饰符

html - 输入字段具有浏览器记住的初始值,但我不希望它们出现

填充当前输入而不是第一个输入的 javascript 按钮