相关疑难解决方法(0)

Proto3 设置值等于默认值在运行时无法识别

Proto3不像 那样严格Proto2,并且没有requiredoroptional字段,没有自定义default值。

鉴于以下定义...

message Order {
    enum Side {
        BID = 0;
        ASK = 1;
    }

    int64 time = 1;
    double price = 2;
    double volume = 3;
    Side side = 4;
}
Run Code Online (Sandbox Code Playgroud)

这些字段中的任何一个都有默认值,毕竟现在没有规则规定您在.build()对象之前必须或不可以提供什么。

time因此is 0priceis0.0sideis的默认值BID,如果您打印一个没有提供其中一个字段或提供默认值的实例,那么运行时会将其视为在这两种情况下从未提供过,因此无法确定是否该值是手动设置的BID或被视为默认值。

例如,如果我们执行以下代码(其 kotlin)

Order.newBuilder()
        .setPrice(1.0)
        .setVolume(2.0)
        .setSide(Order.Side.BID)
        .build()
        .apply { println(this) }
Run Code Online (Sandbox Code Playgroud)

我们将得到这个输出

price: 1.0
volume: 2.0
Run Code Online (Sandbox Code Playgroud)

至少这很烦人,因为当您使用标准.toString()或 …

java protocol-buffers kotlin proto3

5
推荐指数
1
解决办法
3022
查看次数

标签 统计

java ×1

kotlin ×1

proto3 ×1

protocol-buffers ×1