协议缓冲区Java,序列化具有字段的枚举

协议缓冲区Java,序列化具有字段的枚举,java,enums,protocol-buffers,Java,Enums,Protocol Buffers,假设我在Java中定义了以下枚举: public enum DogBreed { GERMAN_SHEPHERD, FRENCH_BULLDOG, ... } public enum Dog { MAX(DogBreed.GERMAN_SHEPHERD), SCOOTER(DogBreed.FRENCH_BULLDOG), ... private final DogBreed breed; } 在原型文件中描述dogbride非常简单,但是我无法找到一种方法来描

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

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

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

  private final DogBreed breed;
}

在原型文件中描述
dogbride
非常简单,但是我无法找到一种方法来描述
Dog
enum。

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

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()

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

message DogMessage {
  string dogName  = 0;
  string dogBreed = 1;
}
我将能够根据另一端的字符串值重建数据模型枚举

谢谢你调查这件事


编辑:进一步实现:无论是什么构成的
Dog
enum。只要我传输它的一个值(MAX,SCOOTER),我就能够基于这个值完全重构枚举。

这就是定义枚举的方法:@bobbel:原始海报似乎完全知道如何创建枚举类,但您的链接与他的主要问题有什么关系——将嵌套枚举表示为原型文件?我想你可能还没有完全理解他的问题。嗯,我认为“描述”在这里只是“写作”的另一个词。那么,请向我解释一下,“描述”这个枚举是什么意思,以及“原型文件”是什么意思?也许您可以为这个问题提供更多的上下文。看起来这个答案可能就是我想要的:。如果它真的解决了我的问题,我会试一试并写一个答案。。。我以前不知道协议缓冲区。。。。但这是一件有趣的事情。对不起,我的回答很愚蠢,这真的对你没有任何帮助。。。但是,如果你对此有一个解决方案,请写在这里作为答案。