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