不要在 java protobuf 中生成 *Count 方法
Don't generate the *Count method in java protobuf
根据 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 class 中。可以不生成吗?
编辑:为了弄清楚我的问题是什么,我们有类似这样的 .proto 文件
message Bar {
...
optional int32 entries_count = 123
...
repeated Foo entries = 456
...
}
因此,entries_count
和entries
都试图生成函数getEntriesCount()
,这显然是不可能的。因此它生成为 getEntriesCount123()
和 getEntriesCount456()
,这对用户来说并不友好。所以我想禁止生成其中之一,因为无论如何它们都应该 return 相同的值。
遗憾的是,我不太确定更改格式的可行性,周围有太多东西可能取决于它:/
不,没有办法做到这一点。
如果您查看生成器代码(primitive fields, message fields, enum fields 等),您会发现 ...Count()
方法(接口和实现)是无条件编写的。
选项:
- 使用现有的生成代码
- 使用您自己的
protoc
分支
- 为主项目创建拉取请求
我强烈推荐选项 1。如果使用选项 2,您将永远需要努力使其保持最新,如果您设法让选项 3 被代码库接受,我会感到非常惊讶...添加额外选项的门槛很高。
基本上,您应该删除 entries_count
字段。这是一个明显的数据可能会不同步的地方——而且 real 值无论如何始终可供客户使用,在我所知道的所有平台上。如果你想让它的意思不仅仅是 "the number of values in entries
" (例如一些估计的总数,你只有一些样本)那么你应该将它重命名为更具体,此时你现有的问题将会消失同时
根据 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 class 中。可以不生成吗?
编辑:为了弄清楚我的问题是什么,我们有类似这样的 .proto 文件
message Bar {
...
optional int32 entries_count = 123
...
repeated Foo entries = 456
...
}
因此,entries_count
和entries
都试图生成函数getEntriesCount()
,这显然是不可能的。因此它生成为 getEntriesCount123()
和 getEntriesCount456()
,这对用户来说并不友好。所以我想禁止生成其中之一,因为无论如何它们都应该 return 相同的值。
遗憾的是,我不太确定更改格式的可行性,周围有太多东西可能取决于它:/
不,没有办法做到这一点。
如果您查看生成器代码(primitive fields, message fields, enum fields 等),您会发现 ...Count()
方法(接口和实现)是无条件编写的。
选项:
- 使用现有的生成代码
- 使用您自己的
protoc
分支
- 为主项目创建拉取请求
我强烈推荐选项 1。如果使用选项 2,您将永远需要努力使其保持最新,如果您设法让选项 3 被代码库接受,我会感到非常惊讶...添加额外选项的门槛很高。
基本上,您应该删除 entries_count
字段。这是一个明显的数据可能会不同步的地方——而且 real 值无论如何始终可供客户使用,在我所知道的所有平台上。如果你想让它的意思不仅仅是 "the number of values in entries
" (例如一些估计的总数,你只有一些样本)那么你应该将它重命名为更具体,此时你现有的问题将会消失同时