【问题标题】:Is it possible to define a method on the Proto enum?是否可以在 Proto 枚举上定义方法?
【发布时间】: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


【解决方案1】:

不,这不是 DSL 架构允许的。

这存在于服务中,但这是在考虑 gRPC 之类的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2015-09-08
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多