Protocol Buffer Java,序列化一个有字段的枚举

Protocol Buffer Java, serialize an enum that has fields

假设我在 Java 中定义了以下枚举:

public enum DogBreed {
  GERMAN_SHEPHERD,
  FRENCH_BULLDOG,
  ...
}

public enum Dog {
  MAX(DogBreed.GERMAN_SHEPHERD),
  SCOOTER(DogBreed.FRENCH_BULLDOG),
  ...

  private final DogBreed breed;
}

在原型文件中描述 DogBreed 很简单,但是我找不到描述 Dog 枚举的方法。

借助我在评论中链接到的答案,我能够编写以下原型文件:

import "google/protobuf/descriptor.proto";

extend google.protobuf.EnumValueOptions {
  DogMessage.DogBreed dogBreed = 51234;
}

message DogMessage {
  enum DogBreed {
    GERMAN_SHEPHERD = 0;
    FRENCH_BULLDOG  = 1;
  }

  enum  Dog {
    MAX     = 0 [(dogBreed) = GERMAN_SHEPHERD];
    SCOOTER = 1 [(dogBreed) = FRENCH_BULLDOG];
  }
}

然后可以在客户端使用 getValueDescriptor.getOptions()

访问 dogBreed 的值

然而我意识到我最终并不需要它。我试图准确地复制我的数据模型 class.That,因为我来自 Jackson 的 JSON 序列化世界,在那里你可以准确地发送和接收你的数据模型 classes.
但是由于 protobuf 使用了中间表示 class 我不妨这样写:

message DogMessage {
  string dogName  = 0;
  string dogBreed = 1;
}

而且我将能够根据另一侧的那些字符串值重建我的数据模型枚举。

感谢您调查此问题

编辑:进一步的认识:Dog 枚举由什么组成并不重要。只要我转移其中一个值(MAX、SCOOTER),我就能够根据这个单一值完全重建枚举。