java – 协议缓冲区:枚举问题

前端之家收集整理的这篇文章主要介绍了java – 协议缓冲区:枚举问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下.proto文件
enum Enum1{
    X=0;
    Y=1;    
}
message SomeClass{
    required  Enum1 enum1=1;
    required Enum2 enum2=2;
}
enum Enum2{
    X=0;
    Z=1;    
}

当我尝试使用protoc来编译它时,我收到以下错误

proto.proto:19:5: “X” is already defined proto.proto:19:5: Note that
enum values use C++ scoping rules,meaning that enum values are
siblings of their type,not children of it. Therefore,“X” must be
unique,not just within “Enum2”.

我有办法克服这个问题!

解决方法

您可以在另一条消息中包含您的枚举,以便可见性不会发生冲突.

例子:

message Enum1{
 enum Enum{
     X=0;
     Y=1;    
 }
}

message Enum2{
 enum Enum{
     X=0;
     Y=1;    
 }
}

message SomeClass{
    required  Enum1.Enum enum1=1;
    required Enum2.Enum enum2=0;
}

你也可以在枚举值加上一些东西.如果您不更改值名称后面的数字,它应与旧版本保持兼容:
例如:

enum Enum1{
    E1_X=0;
    E1_Y=1;    
}
enum Enum2{
    E2_X=0;
    E2_Z=1;    
}
message SomeClass{
    required  Enum1 enum1=1;
    required Enum2 enum2=2;
}

猜你在找的Java相关文章