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

标签 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(),这对用户来说并不友好。所以我想抑制其中之一的生成,因为无论如何它们都应该返回相同的值。

遗憾的是,我不太确定更改格式的可行性,周围太多的事情可能取决于它:/

最佳答案

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

如果您查看生成器代码( primitive fieldsmessage fieldsenum fields 等),您可以看到 ...Count() 方法(接口(interface)和实现)是无条件地写。

选项:

  1. 使用现有的生成代码
  2. 使用您自己的protoc分支
  3. 为主项目创建拉取请求

我强烈推荐选项 1。使用选项 2,您将永远需要做工作来使其保持最新状态,如果您设法让选项 3 被代码库接受,我会感到非常惊讶。 .添加额外选项的阈值相当高。

基本上,您应该删除 entries_count 字段。这是一个明显的数据可能不同步的地方 - 在我所知道的所有平台上,无论如何,真实值始终可供客户使用。如果您希望它的含义不仅仅是“entries”中的值的数量(例如,一些估计的总数,您只有一些样本),那么您应该将其重命名为更具体,此时您现有的问题将同时消失。

关于java - 不要在java protobuf中生成*Count方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34879025/

相关文章:

java - 未应用last()

javascript - 将 javascript 中的 Protobuf 模式转换为单独的原型(prototype)定义文件

go - 无法识别的导入路径 "google/protobuf"

go - 如何解码被拦截的gRPC请求/响应以查看golang中已发送/已接收的protobuf消息?

java - 如何通过键连接两个 hashMap

java - 观察者表更新期间发生NullPointerException

c++ - 在 Bazel 中包含 Protobufs

java - 解决由于 C++ 导致的 Google protobuf 中枚举字段命名限制的解决方案

java - 如何使用两个主题?

java - 传递与参数类型不同的类型