【发布时间】:2015-05-06 18:44:09
【问题描述】:
我有一个为游戏服务器运行的 Socket 网络。为了简化相互发送数据,我想使用枚举作为构造函数的输入,并使用基于该枚举值的构建方法。
例如,我有一个枚举:
enum DataType {
connectPlayer,
returnServerState;
}
现在我有一个名为 BuildData 的构造函数:
private DataType dataType;
public BuildData(DataType dataType) {
this.dataType = dataType;
}
我的问题是:我希望能够根据 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 方法。
我的问题是:我是否必须根据包含正确方法的枚举类型返回一个类实例,还是有更简单的方法来做到这一点?
谢谢!
【问题讨论】:
-
也许使用您的 DataType 作为您方法的附加参数。
String build(String s1, String s2, DataType dt) -
您的 build() 方法是否总是接受相同类型的参数(例如 build(String, String))?也就是说,无论DataType如何,构建方法签名都相同吗?
-
对不起@pens-fan-69,忘了提。不,它有时会接受更多的参数,有时会接受更少的参数,具体取决于枚举类型。
-
对于您的情况,您几乎可以肯定希望创建一个丰富的枚举类型,并使用特定的常量方法来生成和返回所需的对象。此外,由于您希望控制创建的对象的类型,因此使用静态工厂方法而不是构造函数(必须返回自己的类型)来构建对象会很有用。
-
"冒号放在中间,所以我可以对它们使用拆分方法。"这通常是糟糕设计的标志。您应该尝试将此数据表示为对象中的实例字段。
标签: java class input constructor enums