簡體   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