gpt4 book ai didi

java - 枚举的每个成员的内部类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:25 27 4
gpt4 key购买 nike

不确定我想要的是否可行,但我正在尝试创建一个枚举,其中每个成员都有自己的内部类。这些内部类都将具有相同的名称 Context 但将单独实现。

理想情况下,我希望它们可以这样使用:

private handleType (MyEnum type) {
switch (type) {

case ENUM_VAL1:
MyEnum.ENUM_VAL1.Context context = new MyEnum.ENUM_VAL1.Context();
handleContext1(context);
break;

case ENUM_VAL2:
MyEnum.ENUM_VAL2.Context context = new MyEnum.ENUM_VAL1.Context();
handleContext2(context);
break;

case ENUM_VAL3:
MyEnum.ENUM_VAL3.Context context = new MyEnum.ENUM_VAL1.Context();
handleContext3(context);
break;

default:
break;
}

对其他实现方式持开放态度。但基本上我需要一个可切换的枚举,其中每个成员都有一个“值”(1、2、3 ...),并且还需要一种将所述枚举与具有构造函数的唯一类相关联的方法。

编辑:一些背景。这将在通过 JSON http 请求进行通信的两个服务之间使用。请求将包含一些元数据,其中一个字段是一个映射到枚举的整数。上下文是一个 POJO,但对于每个 ENUM_VALUE 都是不同的。本质上,上下文将被构建并序列化为 JSON。该 json 实际上只是顶级 json 请求中称为 context 的字符串字段。在接收服务上,将有一个 ENUM_VALUE 开关,其中上下文被适当解码,然后分派(dispatch)到其适当的处理程序。

EDIT2:这个枚举将在两个服务之间共享。

EDIT3:这是对我正在尝试做的事情的更明确的解释。

我的服务请求:

public class MyServiceRequest {
String meta1;
String meta2;
int typeID;
String context;
}

生成请求:

MyServiceRequest req = new MyServiceRequest();
req.meta1 = ...
req.meta2 = ...
req.typeID = MyEnum.ENUM_VALUE.getCode(); // int

MyEnum.ENUM_VALUE.Context context = new MyEnum.ENUM_VALUE.Context(); // factory would be fine as well
... // populate context
req.context = toJSON(context);
requestJSON = toJSON(req);
post(requestJSON);

解码请求:

MyServiceRequest req = ...
MyEnum type = new MyEnum(req.typeID);
switch(type) {
case ENUM_VALUE:
MyEnum.ENUM_VALUE.Context context = fromJSON(req.context, MyEnum.ENUM_VALUE.Context.class);
doSomething(context);

最佳答案

一个人认为你可以做的是让你的枚举工具 Supplier<Context> .现在每个项目都必须声明一个 get() 方法来创建单独的 Context 子类型。

enum MyEnum implements Supplier<Context>{
FOO{ @Override public Context get(){ return new FooContext(); } },
BAR{ @Override public Context get(){ return new BarContext(); } }
}

这将使您的客户端代码更加简单:

private void handleType (MyEnum type) {
handleContext(type.get());
}

关于java - 枚举的每个成员的内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47209990/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com