【发布时间】:2020-03-07 02:11:12
【问题描述】:
假设我有一个 Proto 缓冲区枚举 operations.proto
enum Operation {
UNSPECIFIED = 0;
PLUS = 1;
MINUS = 2;
TIMES = 3;
DIVIDE = 4;
}
所以在我的 Java 代码中,我必须做类似的事情
if (operation == Operation.PLUS) {
return x+y;
} else if (operation == Operation.MINUS) {
return x-y;
}
...
而且我知道我可以更好地使用“有效的 Java 条款 34:使用枚举而不是 int 常量”来对枚举类型使用类似的方法
public enum Operation {
PLUS {public double apply(double x, double y){return x + y;}},
MINUS {public double apply(double x, double y){return x - y;}},
TIMES {public double apply(double x, double y){return x * y;}},
DIVIDE{public double apply(double x, double y){return x / y;}};
public abstract double apply(double x, double y);
}
但是,我的 Operation 是一个原型枚举而不是 java 枚举。我可以想象我可以将 proto 枚举映射到 Java 枚举并在 Java 枚举上定义方法(不确定这是否会使问题过于复杂)。但是有什么聪明的方法可以实现这一目标吗?
【问题讨论】:
-
您不能将自己的方法添加到为 protobufs 生成的枚举中。
标签: java enums protocol-buffers proto