如何打印枚举名称而不是协议缓冲区的 int 值(Java)

Ray*_* Ho 4 java protocol-buffers

默认 toString 打印 int 值而不是枚举名称。有没有一种简单的方法可以让它打印枚举名称?

luo*_*uan 5

(答案适用于proto3

使用 Carl 的枚举示例:

enum Foo {
  BAR = 1;
  BAZ = 5;
  QUX = 1234;
}
Run Code Online (Sandbox Code Playgroud)

假设您有变量: Foo foo = Foo.BAR, 以获取以下名称foo

String fooName = foo.getValueDescriptor().getName(); //fooName="BAR"  
Run Code Online (Sandbox Code Playgroud)

另见:

https://developers.google.com/protocol-buffers/docs/reference/java-generated#enum

https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Descriptors.EnumDescriptor#getName()


Car*_*elo 0

对于以下 protobuf 枚举:

enum Foo {
  BAR = 1;
  BAZ = 5;
  QUX = 1234;
}
Run Code Online (Sandbox Code Playgroud)

文档说:

An integer constant is also generated with the suffix _VALUE for each enum value.
Run Code Online (Sandbox Code Playgroud)

听起来您正在使用常量“例如 BAR_VALUE、BAZ_VALUE 或 QUX_VALUE”。是这样吗?

请参阅:https://developers.google.com/protocol-buffers/docs/reference/java- generated#enum