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

如何打印枚举名称而不是协议缓冲区的int值(Java),java,protocol-buffers,Java,Protocol Buffers,默认的toString打印int值,而不是枚举名称。有没有一种简单的方法可以让它改为打印枚举名称?对于以下protobuf enum: enum Foo { BAR = 1; BAZ = 5; QUX = 1234; } 文件说: An integer constant is also generated with the suffix _VALUE for each enum value. 听起来您使用的是常量“例如BAR_值、BAZ_值或QUX_值”。是这样吗 请参阅:您可以

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

对于以下protobuf enum:

enum Foo {
  BAR = 1;
  BAZ = 5;
  QUX = 1234;
}
文件说:

An integer constant is also generated with the suffix _VALUE for each enum value.
听起来您使用的是常量“例如BAR_值、BAZ_值或QUX_值”。是这样吗


请参阅:

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

假设你有一个protobuf枚举

enum Foo {
    BAR = 1;
    BAZ = 2;
}
如果您从Java引用了Foo,那么可以使用
Foo.values()
-或者如果您正在使用泛型枚举进行调用,
genericEnum.getDeclaringClass().getEnumConstants()
,获得一个Foo值数组

这将给您提供
[BAR,BAZ]
(答案为)

使用Carl的枚举示例:

enum Foo {
  BAR = 1;
  BAZ = 5;
  QUX = 1234;
}
假设您有变量:
Foo Foo=Foo.BAR
,以获取
Foo
的名称:

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


你的第一句话不正确<默认情况下,code>toString()返回常量的名称。如果您使用的是覆盖
toString
的内容,则可以使用
name()
来获取名称。是否使用
enum
类?如果是这样,则其他人已重写了您的
toString()
方法。其行为是打印值的名称:对于响应的人,Raymond可能正在谈论协议缓冲区中的枚举!!!对于@Raymond,请告诉我们您是如何访问协议缓冲区的,当您生成java时,它应该生成一个标准java枚举,其中toString()=枚举值。您是DynamicMessage还是Lite消息或标准协议缓冲区以外的其他内容。一些代码也很有用???