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

2024-01-03

Proto3并不严格Proto2,并且没有required or optional字段,没有自定义default values.

鉴于以下定义...

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

    int64 time = 1;
    double price = 2;
    double volume = 3;
    Side side = 4;
}

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

所以默认为time is 0, price is 0.0 and side is BID,如果您打印未提供其中一个字段的实例或提供默认值那么运行时会将其视为在两种情况下都从未提供过,因此无法确定该值是否已手动设置为BID或者它被视为默认值。

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

Order.newBuilder()
        .setPrice(1.0)
        .setVolume(2.0)
        .setSide(Order.Side.BID)
        .build()
        .apply { println(this) }

我们将得到这个输出

price: 1.0
volume: 2.0

至少这很烦人,因为当您使用标准打印原型对象时.toString()或者 json 打印机,你将得到这个裁剪后的输出...

{ "price": 1.0, "volume": 2.0 }
{ "price": 1.0, "volume": 2.0, "side": "ASK" }
{ "price": 1.0, "volume": 2.0 }
{ "price": 1.0, "volume": 2.0, "side": "ASK" }

但是,如果您的客户不一定关心默认值并希望所有字段都存在怎么办?

问题:有没有办法改变这种行为?至少我们如何确保如果设置了值就会显示出来?

也许有一种方法可以告诉protoc生成不同的代码(影响默认行为)...


如果您想要 Proto2 的默认值和设置/取消设置行为,您应该切换回 Proto2。 Proto2 不太可能很快消失,因为大量代码(包括 Google 内部)仍然依赖于它,并且它与 Proto3 共享大部分实现。将 proto2 与 proto3 视为一个选项(事实上,这正是您正在寻找的选项)而不是版本更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Proto3 设置值等于默认值在运行时无法识别 的相关文章

  • Spring MVC 应用程序可以是多线程的,即使它的 servlet 不是吗?

    当您谈论 Spring 应用程序是多线程时 您是否一定是指该应用程序中定义的 servlet 是否是多线程的 或者即使应用程序中的 servlet 不是多线程 Spring 应用程序也可以配置为多线程吗 不再支持单线程 servlet 它们
  • jUnit 中每个 @Test 的不同拆卸

    有没有办法为 jUnit 中的每个 Test 定义不同的拆卸 Use the After注释来指示每个之后要运行的方法 Test 像这样的全套注释是 BeforeClass 首先 Tests are run Before 在每个之前 Tes
  • 使用 IntentService 使用 Camera2 拍照

    我正在尝试创建一个可以拍照但不显示预览的应用程序 使用本教程 https www youtube com watch v oPu42I0HSi4 https www youtube com watch v oPu42I0HSi4如果我使用和
  • CXF 客户端异常:{XXX} 的拦截器已引发异常,现在展开

    我遇到以下 CXF 异常 warning Interceptor for http example com wsdl esc 2011 12 12 AmazonEC2 http example com wsdl esc 2011 12 12
  • Android Studio 中没有参考文档

    昨天刚刚出现了一个新问题 当我将鼠标悬停在方法上或按 Ctrl Q 时 我通常会获取该特定方法的文档信息 但现在我只是得到 按 Ctrl QSharedPreferences getLong Following external urls
  • 检查 jar 是否从 shell 运行

    我有一个 java jar 程序 我试图在我的机器启动时运行它 理想情况下 shell 脚本将每 60 秒检查一次以确保 jar 正在运行 我如何检查 jar 是否在 centos 上运行 这似乎不起作用 我当前的 sh 文件 bin ba
  • 如何在Intellij IDEA中复制maven依赖项到输出工件WEB-INF/lib?

    我知道在 eclipse maven 中可以将依赖项复制到 WEB INF lib 目录setting Deployment Assembly and Build Path 但是我怎样才能用 Intellij IDEA 实现这一点呢 好的
  • Mac OSX 上使用 Java 7 的透明 JFrame/JWindow

    我们有一个屏幕共享小程序 它打开 Swing JFrame 并使用 Robot 类捕获空框架后面的屏幕 用户可以单击框架并与小程序后面的任何内容进行交互 这在 Windows 上运行良好 并且用于 Apple 的 Java 版本 但对于 M
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • HttpMediaTypeNotAcceptableException / HttpMediaTypeNotAcceptableException:找不到可接受的表示

    我有一个客户端正在尝试连接的 API 但是它会抛出错误 2015 09 22 04 21 44 297 org springframework web servlet mvc method annotation HttpEntityMeth
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • 为什么我用Java计算的结果是错误的?

    我使用这段代码来计算一些东西 但几乎在所有情况下结果都是 0 0 为什么 编译器中没有警告或错误 private void jButton1ActionPerformed java awt event ActionEvent evt try
  • Maven 依赖冲突:org.w3c.dom.ElementTraversal

    我有一个 Java 代码库 它使用 Maven 进行依赖项解析并在 CI 上运行测试 经过最近的一批开发 大到足以很难识别重大更改 我的一些测试现在在通过 Maven 运行时失败了NoClassDefFoundError for org w
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 应返回带有 html 代码的字符串的支持 bean 属性返回空字符串

    我的支持 bean 中有一个返回 html 代码的属性 public String getHtmlPrevisualizar return Hello world 我想要做的是在 iframe 中显示这个 html 代码 我用 JavaSc
  • 清单合并失败:需要为 显式指定 android:exported

    我的清单文件有问题 错误消息 清单合并失败 android 需要为 明确指定导出 面向 Android 12 及更高版本的应用需要指定显式值android exported当相应的组件定义了意图过滤器时 有关详细信息 请参阅 https d
  • 选择活动时运行时崩溃

    首先我想说我几乎没有 Android 经验 这是我在 Android 中的第一个项目 而且我的老师不太擅长教学 所以我对任何过度的无知表示歉意 在进一步讨论之前先解释一下 我的应用程序的目标本质上是能够记录您在某些活动上花费了多少时间 记录
  • 如何在运行时编译和使用Kotlin代码?

    我正在尝试创建一个 KotlinVert x http vertx io vertx2 language support html语言支持模块 我需要一种方法来编译 Kotlin 文件并使用ClassLoader 我尝试过使用kotlin
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言

随机推荐