不同的枚举,protobuf 中的值相同

Alp*_*ren 9 protocol-buffers kotlin

我有这样的协议缓冲区定义:

package com.asd;

enum AType {
    A1 = 0;
    A2 = 1;
    Unknown = 2;
}

enum BType {
    B1 = 0;
    B2 = 1;
    Unknown = 2;
}
Run Code Online (Sandbox Code Playgroud)

编译时,我收到此错误:

“com.asd”中已定义“未知”。请注意,枚举值使用 C++ 作用域规则,这意味着枚举值是其类型的同级,而不是其子级。因此,“Other”在“com.asd”中必须是唯一的,而不仅仅是在“BType”中。

除了使用不同的包之外,还有解决此问题的方法吗?

Alp*_*ren 12

我相信没有直接的方法可以在同一个包中使用相同的枚举值,但有两种解决方法(链接):

  1. 使用前缀:

     package com.asd;
    
     enum AType {
         AType_A1 = 0;
         AType_A2 = 1;
         AType_Unknown = 2;
     }
    
     enum BType {
         BType_B1 = 0;
         BType_B2 = 1;
         BType_Unknown = 2;
     }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将枚举放在不同的消息中:

     message ATypeMessage{
         enum AType{
             A1 = 0;
             A2 = 1;
             Unknown = 2;
         }
     }
    
     message BTypeMessage{
         enum BType{
             B1 = 0;
             B2 = 1;
             Unknown = 2;   
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)


Sir*_*ode 0

我没有足够的声誉来发表此评论,我的建议是一个可能不起作用的黑客。option allow_alias = true; 但是您是否尝试过在两者中添加 enum并使用相同的值。

参考: https: //developers.google.com/protocol-buffers/docs/proto#enum

  • `allow_alias` 只允许您有不同的枚举常量指向枚举中的相同值,它不允许您在不同的枚举中设置相同的枚举常量名称 (3认同)