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

时间:2013-07-23 01:02:35

标签: java protocol-buffers

默认的toString打印int值而不是枚举名称。是否有 easy 方式使其打印枚举名称?

3 个答案:

答案 0 :(得分:2)

(答案适用于proto3

使用Carl的枚举示例:

enum Foo {
  BAR = 1;
  BAZ = 5;
  QUX = 1234;
}

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

String fooName = foo.getValueDescriptor().getName(); //fooName="BAR"  

另见:

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()

答案 1 :(得分:0)

对于以下protobuf枚举:

enum Foo {
  BAR = 1;
  BAZ = 5;
  QUX = 1234;
}

文档说:

An integer constant is also generated with the suffix _VALUE for each enum value.

听起来你正在使用常量“例如BAR_VALUE,BAZ_VALUE或QUX_VALUE”。是这种情况吗?

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

答案 2 :(得分:0)

您可以使用java中的.values()获取枚举值列表。

假设你有一个protobuf enum

enum Foo {
    BAR = 1;
    BAZ = 2;
}

如果您从Java引用了Foo,则可以使用Foo.values()获取一系列Foo值 - 或者如果您使用通用枚举进行调用genericEnum.getDeclaringClass().getEnumConstants()

这会给你[BAR, BAZ]