3

我使用协议缓冲区 maven 插件来编译.proto文件。我真的很喜欢协议缓冲区,除了它不接受空值作为默认值或不接受值的一件事。相反,只要null通过,它就会抛出 NPE。防止这种 NPE 不必要地使代码膨胀,太多了,我真的很想避免这种情况!

我已经看到这个请求/问题被社区强烈提出并被 PB 团队拒绝。现在,我正在寻找可以通过自己修改/实现任何类来覆盖此行为的任何方法,以便编译我的原型文件以生成不会在空值上抛出 NPE 的代码。任何人都可以建议如何?或者有没有更简单的方法?

4

1 回答 1

0

现在,我正在寻找可以通过自己修改/实现任何类来覆盖此行为的任何方法,以便编译我的原型文件以生成不会在空值上抛出 NPE 的代码。

简而言之,您想要更改消息生成器代码。这很复杂,但也没那么复杂。缺点是它在 C++ 中......当然你需要在未来维护你的 fork,或者被当前形式的 protobuf 卡住。

您可能想从查看java_string_field.ccand开始java_message_field.cc

我估计这只是几天的工作,如果那样的话 - 但你将永远承担一个小而存在的维护负担。

当然,另一种选择是完全从头开始自己重写消息生成——这显然是一项更大的任务,但我最终为我的protobuf-csharp-port项目做了一个……在 C++ 版本工作之后。(不过,我的端口遵循相同的非无效方法。)

于 2013-04-12T13:20:39.223 回答