当前位置: 首页 > 知识库问答 >
问题:

Pro 3编译器没有为Map字段生成put方法

韦高阳
2023-03-14

我用map创建消息,并使用原型3(原型-3.0.0-alpha-3.1-windows-x86_64.exe编译器)生成java pojo。但是在消息生成器中没有map的put方法。

这是原型文件片段:

message User {
	map<string, string> contacts = 1;
	int32 id = 2;
	string name = 3;
	int32 age = 4;
	string email = 5;
}

在用户中。Builder没有putAllContact()方法。

在谷歌的文档中说

The compiler will generate the following method only in the message's builder:

Map<Integer, Integer> getMutableWeight();: Returns a mutable Map. Note that multiple calls to this method may return different map instances. The returned map reference may be invalidated by any subsequent method calls to the Builder.
Builder putAllWeight(Map<Integer, Integer> value);: Adds all entries in the given map to this field.

虽然我可以使用这些代码将键/值放入地图

User.Builder builder = User.newBuilder();
Map<String,String> contacts = builder.getMutableContacts();
contacts.put("key", "value");

我仍然想知道为什么我生成的java pojo没有map的put方法。

谢谢

共有1个答案

终逸仙
2023-03-14

你能试试最新版本v3.0.0-beta-1吗?我记得这个putXXX()方法是最近才添加的。它可能不在alpha-3中。

 类似资料:
  • 为什么方法编译成功,而没有成功?

  • 问题内容: 我一直在尝试在我的EC2实例上安装Gearman,但是当我尝试./configure gearmand时,我得到了: 现在,奇怪的是,GCC肯定已安装。 退货 但是,当我尝试运行命令“ gcc”时,找不到… 我试图通过yum擦除/安装/重新安装gcc和gcc-c ++,但这似乎无济于事。 有什么建议吗?提前致谢。 问题答案: 您可以通过链接到以下命令来解决此问题: 升级时,您可以保留多

  • 至少在GCC中,如果我们提供生成汇编代码的选项,编译器会通过创建一个包含汇编代码的文件来服从。但是,当我们简单地运行命令而没有任何选项时,它不会在内部生成汇编代码吗? 如果是,那么为什么它需要首先生成一个汇编代码,然后将其翻译成机器语言?

  • 问题内容: 当Java编译器将原语自动包装到包装类时,它在幕后生成什么代码?我想象它调用: 包装器上的valueOf()方法 包装器的构造函数 还有其他魔术吗? 问题答案: 您可以使用该工具亲自查看。编译以下代码: 编译和反汇编: 输出为: 因此,如您所见,自动装箱将调用static方法,而自动拆箱将在给定对象上调用。没什么,真的- 只是语法糖。

  • 我正在尝试创建一个自定义注释,例如,确保字段或方法既是又是,如果字段或方法既不是又不是,则会生成编译时错误,如以下示例所示: 到目前为止,我已经完成了两个自定义注释接口: 和: 正如所暗示的,我不知道如何生成编译时错误。Processor的文档清楚地表明我不应该抛出异常, 如果处理器抛出未捕获的异常,该工具可能会停止其他活动注释处理器。 它接着描述了当提出错误条件时会发生什么,现在是如何提出错误条

  • 问题内容: 我正在尝试创建一个自定义批注,例如,以确保字段或方法为and ,并且如果该字段或​​方法不为and ,则将生成编译时错误,如以下示例所示: 到目前为止,我已经完成了两个自定义注释接口: 和: 如所示,我不知道如何生成编译时错误。Processor 的文档清楚地表明,我不应该抛出异常, 如果处理器抛出未捕获的异常,则该工具可能会停止其他活动的注释处理器。 它继续描述了引发错误条件时会发生