java - 如何处理 protobuf3 消息中的可空枚举类型字段?

标签 java protocol-buffers grpc grpc-java

以下是我的 protobuf 定义:

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

message UpdateRequest {
  string id = 1;
  Foo foo = 2;
  .
  .
  .
}

我需要 UpdateRequestfoo 字段可以为 null。但是,如果我不设置此字段的值,那么根据 protobuf 语义,它最终总是选择 BAR 作为默认值。

环顾四周,我找到了几种方法来处理这个问题。

  1. 在枚举中添加一个额外的 UNKNOWN 值并将其映射到 0 以便该值将用作默认值而不是 BAR 我可以将此值视为 null。
enum Foo {
   UNKNOWN = 0;
   BAR = 1;
   BAZ = 2;      
}
  1. 使用oneof结构。

但是,不知何故,我觉得上述两种方法都是一种解决方法,我无法找到解释处理这种情况的最佳实践的官方文档。

处理此用例的最佳做法是什么?

最佳答案

您应该能够使用 hasFoo() 检查字段,而 getFoo() 将返回 BARhasFoo( ) 应该返回 false

关于java - 如何处理 protobuf3 消息中的可空枚举类型字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66507828/

相关文章:

json - 为包含随机字段名称的 JSON 输入编写原型(prototype)文件

C++ 序列化性能

azure - 在 vnet 中使用 gRPC 将 Azure 应用服务连接到 Azure 容器应用

python - tensorflow的slim有分布式版本吗?

java - 使用回调异步加载 ListView 中的图像

java - 如何处理 Java 中的 LinkageErrors?

java - 执行jar文件: Caused by: java. lang.ClassNotFoundException : org. springframework.context.ApplicationContext

java - 获取对象的类

通过网络使用 Akka 的 Scala 案例类与 Protocol Buffer

c++ - 使用 MS Visual Studio 编译 gRPC 时缺少 CMAKE_ASM_NASM_COMPILER