【发布时间】:2020-09-23 06:31:15
【问题描述】:
假设我有一个原型对象如下:
oneof sample {
string str = 1;
int64 i = 2;
... (many other fields inside oneof)
}
自动生成的 java 代码将为名为 SampleCase 的 sample 生成枚举,其中包含
enum SampleCase {
STR(1)
I(2)
...
}
现在在应用程序端,我想根据枚举SampleCase 的类型调用不同对象的方法。一种天真的方法是做 if-else:
if(case == SampleCase.STR) {
obj1.call();
} else if(case == SampleCase.I) {
obj2.call();
} else if(....)
...
访问者模式似乎很适合这里避免 if-else。我查看了this,但这需要修改枚举,而且我无权修改 protobuf 生成的枚举。任何方法如何进一步进行?
我也愿意接受任何其他可以解决此问题的设计模式。
【问题讨论】:
-
Switch case 支持enum types。
-
@jaco0646 我正在寻找一个通用的解决方案。我的代码中有很多地方都有这个 if-else。拥有 switch case 并不能真正解决任何问题。
标签: java design-patterns enums protocol-buffers