不要在java protobuf中生成* Count方法

时间:2016-01-19 14:12:25

标签: java protocol-buffers

根据protobuf文档

Repeated fields have some extra methods – a Count method

这样的事情:

// repeated .tutorial.Person.PhoneNumber phone = 4;
public List<PhoneNumber> getPhoneList();
public int getPhoneCount();
public PhoneNumber getPhone(int index);

是否可以抑制getPhoneCount的生成?我不想在生成的java类中使用它。是否有可能不生成它?

编辑:为了弄清楚我的问题是什么,我们有.proto文件,有这样的东西

message Bar {
    ...
    optional int32 entries_count = 123
    ...
    repeated Foo entries = 456
    ...
}

正因为如此,entries_countentries都试图生成函数getEntriesCount(),这显然是不可能的。因此,它生成为getEntriesCount123()getEntriesCount456(),这不完全是用户友好的。所以我想抑制其中一个的生成,因为无论如何它们都应该返回相同的值。

可悲的是,我不确定改变格式的可行性,太多的事情可能取决于它:/

1 个答案:

答案 0 :(得分:1)

不,没有办法做到这一点。

如果查看生成器代码(primitive fieldsmessage fieldsenum fields等),您会发现...Count()方法(接口和实现)都是无条件写入的

选项:

  1. 使用现有代代码
  2. 使用您自己的protoc
  3. 分支
  4. 为主项目创建拉取请求
  5. 我强烈推荐选项1.使用选项2,您将永远不得不继续工作以保持最新状态,如果您设法获得选项3,我会感到非常惊讶接受进入代码库...添加额外选项的标准非常高。

    基本上,您应该删除entries_count字段。这是一个显而易见的地方,数据可能会失去同步 - 无论如何,真实的值始终可供客户使用,我所知道的所有平台都是如此。如果你想要它的意思不仅仅是&#34; entries&#34;中的值的数量。 (例如,某些估计的总计数,您只有一些样本)然后您应该将其重命名为更具体,此时您的现有问题将同时消失。