Java 和 C++ 中的构建器?

2024-02-29

在谷歌的协议缓冲区 http://code.google.com/p/protobuf/API for Java,他们使用这些漂亮的构建器来创建对象(请参阅here http://code.google.com/apis/protocolbuffers/docs/javatutorial.html#builders):

Person john =
  Person.newBuilder()
    .setId(1234)
    .setName("John Doe")
    .setEmail("[email protected] /cdn-cgi/l/email-protection")
    .addPhone(
      Person.PhoneNumber.newBuilder()
        .setNumber("555-4321")
        .setType(Person.PhoneType.HOME))
    .build();

但相应的C++ API并不使用这样的Builders(参见here http://code.google.com/apis/protocolbuffers/docs/cpptutorial.html)

C++ 和 Java API 应该做同样的事情,所以我想知道为什么他们不在 C++ 中使用构建器。这背后是否有语言原因,即它不符合习惯用法或者在 C++ 中不受欢迎?或者可能只是编写 Protocol Buffers 的 C++ 版本的人的个人喜好?


在 C++ 中实现类似功能的正确方法是使用返回 *this 引用的 setter。

class Person {
  std::string name;
public:
  Person &setName(string const &s) { name = s; return *this; }
  Person &addPhone(PhoneNumber const &n);
};

该类可以像这样使用,假设有类似定义的 PhoneNumber:

Person p = Person()
  .setName("foo")
  .addPhone(PhoneNumber()
    .setNumber("123-4567"));

如果需要一个单独的构建器类,那么也可以这样做。应分配此类建设者 当然,在堆栈中。

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

Java 和 C++ 中的构建器? 的相关文章

  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • 删除 sourceSets.main.runtimeClasspath 中的 jar

    我的 gradle 中有这个 sourceSets main compileClasspath configurations provided runtimeClasspath configurations provided test co
  • 从选择框中删除重复条目

    我如何使用 jQuery 删除重复项
  • 如何制作在 iOS 上的 VLC 中播放的音乐文件的 URL?

    我想通过我的网站向 iPhone 和 iPad 用户提供 MP3 和其他文件格式 VLC 的 iOS 应用程序似乎符合要求 但他们说 Additionally third party websites and apps may includ
  • 从 VBA 项目中删除密码

    如何以编程方式从 Excel VBA 项目中删除 已知 密码 需要明确的是 我想从 VBA 项目中删除密码 而不是从工作簿或任何工作表中删除密码 删除 VBA 项目密码的另一种方法是 使用十六进制编辑器打开 xls 文件 即十六进制编辑ht
  • 如何调试 Captive Portal 中的浏览器?

    强制门户有一个浏览器 当您尝试连接到无线网络时 该浏览器有时会打开 有谁知道我该如何调试它 我已经尝试过的 我尝试运行模拟器 但模拟器无法打开门户 我尝试过将 iPhone 连接到我的 Mac 并使用 Safari 开发进行调试 但这仅在
  • 如何在雪豹上安装gem pg

    我需要在雪豹上安装 gem pg 因为我正在 Rails 代码库上运行 rake 我没有使用 postgres 这是我收到的错误 sudo gem install pg Password Sorry try again Password B
  • 自动映射器有什么用?

    What s 自动映射器 http www codeplex com AutoMapper for 它将如何帮助我处理域和控制器层 asp net mvc 也许一个例子会有所帮助 假设您有一个很好标准化的数据库模式 如下所示 Orders
  • Python——词法分析和标记化

    我希望加快我的发现过程 因为这是我第一次涉足词法分析领域 也许这甚至是一条错误的道路 首先 我将描述我的问题 我有非常大的属性文件 大约 1 000 个属性 经过提炼后 实际上只有大约 15 个重要属性 其余属性可以生成或很少更改 因此 例
  • 在加载时应用选择背景颜色?

    请查看以下链接以查看我的代码的运行情况 http codepen io DigitalSquid pen mAkuC http codepen io DigitalSquid pen mAkuC 如何使背景颜色出现在页面加载时 on win
  • MVC 模式中的“Hello World”

    在面试某家公司的时候 我被问到了这个问题 你知道哪些设计模式 然后我被告知基于 MVC 设计模式编写最简单的 hello world 应用程序 我想出了一个 JavaScript 程序 var arr a b c d this is an
  • 应用 pyspark ALS 的“recommendProductsForUsers”时出现 StackOverflow 错误(尽管可用 >300GB RAM 的集群)

    寻找专业知识来指导我解决以下问题 背景 我正在尝试使用受启发的基本 PySpark 脚本这 例子 https github com GoogleCloudPlatform spark recommendation engine blob m
  • Laravel 至少需要一个字段

    我有两个字段billable option and billable option yes 我想验证至少一个字段是必填字段 我努力了 this gt validate request billable option gt required
  • 获取linux可执行文件加载地址(__builtin_return_address和addr2line)

    我正在编写一些代码来存储每个内存分配的回溯 然后 我将这些列表写入文件以进行离线分析 在win32中我使用 AddressOfReturnAddress然后手动创建回溯 由于我使用的每次运行的地址都是随机的GetModuleInformat
  • 无法在 Crashlytics 中获取本机崩溃的堆栈跟踪

    我有一个 Android 项目 其中包含本机库 so 我已将 firebase crashlytics 集成到我的项目中 我能够在 firebase crashlytics 中获取 Java 崩溃的崩溃转储 但是 如果发生本机崩溃 堆栈跟踪
  • 如何定义具有键类型和值类型之间相关性的 Map,而它们都是并集

    这是显示我想要实现的目标的示例 除了两个问题之外 它几乎可以工作 设置不显示错误代码的错误 Immer Draft 类型 或任何 DeepWritable 实用程序类型 完全搞乱了这个技巧 基本上在我看来 我在这里所做的事情并不是什么真正的
  • 在 scrapyd 中启用 HttpProxyMiddleware

    阅读scrapy文档后 我认为HttpProxyMiddleware是默认启用的 但是当我通过 scrapyd 的 webservice 接口启动蜘蛛时 HttpProxyMiddleware 未启用 我收到以下输出 2013 02 18
  • 如何获取适用于 adMob 的测试广告横幅并测试插页式广告?

    我正在尝试设置 adMob 广告 我有两个问题 1 我是否正确使用了 adListener 接口 2 为什么我看不到插页式广告 让我们从 adListener 开始 据我从说明中了解到 adListener 是一个接口 所以我创建了一个界面
  • (iPhone) 我可以使用调度程序进行 AudioServicesPlaySystemSound 循环吗?

    我可以使用调度程序进行 AudioServicesPlaySystemSound 循环吗 一个问题是我无法获得声音持续时间 有什么方法可以获取持续时间 以便我可以动态创建循环声音的调度程序 据我所知 AudioService 没有内置循环和
  • 消息总线和消息队列理解

    我想知道我对消息总线和消息队列工作原理的理解是否正确 首先 我需要明确命名 服务巴士可以与以下互换使用消息总线 这是一种发布者 订阅者类型的系统 其中消息被添加到任意数量的发布者的消息集合中 并且任意数量的订阅者可以从中读取消息 到目前为止
  • Java 和 C++ 中的构建器?

    在谷歌的协议缓冲区 http code google com p protobuf API for Java 他们使用这些漂亮的构建器来创建对象 请参阅here http code google com apis protocolbuffe