以下是我的 protobuf 定义:
enum Foo {
BAR = 0;
BAZ = 1;
}
message UpdateRequest {
string id = 1;
Foo foo = 2;
.
.
.
}
我需要 UpdateRequest
的 foo
字段可以为 null。但是,如果我不设置此字段的值,那么根据 protobuf 语义,它最终总是选择 BAR
作为默认值。
环顾四周,我找到了几种方法来处理这个问题。
- 在枚举中添加一个额外的
UNKNOWN
值并将其映射到0
以便该值将用作默认值而不是BAR
我可以将此值视为 null。
enum Foo {
UNKNOWN = 0;
BAR = 1;
BAZ = 2;
}
- 使用
oneof
结构。
但是,不知何故,我觉得上述两种方法都是一种解决方法,我无法找到解释处理这种情况的最佳实践的官方文档。
处理此用例的最佳做法是什么?
最佳答案
您应该能够使用 hasFoo()
检查字段,而 getFoo()
将返回 BAR
,hasFoo( )
应该返回 false
。
关于java - 如何处理 protobuf3 消息中的可空枚举类型字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66507828/