繁体   English   中英

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

[英]How to print enum names instead of int value of a protocol buffer (Java)

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

(答案是针对proto3

使用卡尔的枚举示例:

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

对于以下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-genic#enum

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

假设您有一个protobuf枚举

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

如果从Java引用了Foo,则可以使用Foo.values()获得Foo值的数组-或者,如果正在使用通用枚举进行调用,则genericEnum.getDeclaringClass().getEnumConstants()

这会给你[BAR, BAZ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM