我使用协议缓冲区 maven 插件来编译.proto
文件。我真的很喜欢协议缓冲区,除了它不接受空值作为默认值或不接受值的一件事。相反,只要null
通过,它就会抛出 NPE。防止这种 NPE 不必要地使代码膨胀,太多了,我真的很想避免这种情况!
我已经看到这个请求/问题被社区强烈提出并被 PB 团队拒绝。现在,我正在寻找可以通过自己修改/实现任何类来覆盖此行为的任何方法,以便编译我的原型文件以生成不会在空值上抛出 NPE 的代码。任何人都可以建议如何?或者有没有更简单的方法?
我使用协议缓冲区 maven 插件来编译.proto
文件。我真的很喜欢协议缓冲区,除了它不接受空值作为默认值或不接受值的一件事。相反,只要null
通过,它就会抛出 NPE。防止这种 NPE 不必要地使代码膨胀,太多了,我真的很想避免这种情况!
我已经看到这个请求/问题被社区强烈提出并被 PB 团队拒绝。现在,我正在寻找可以通过自己修改/实现任何类来覆盖此行为的任何方法,以便编译我的原型文件以生成不会在空值上抛出 NPE 的代码。任何人都可以建议如何?或者有没有更简单的方法?
现在,我正在寻找可以通过自己修改/实现任何类来覆盖此行为的任何方法,以便编译我的原型文件以生成不会在空值上抛出 NPE 的代码。
简而言之,您想要更改消息生成器代码。这很复杂,但也没那么复杂。缺点是它在 C++ 中......当然你需要在未来维护你的 fork,或者被当前形式的 protobuf 卡住。
您可能想从查看java_string_field.cc
and开始java_message_field.cc
。
我估计这只是几天的工作,如果那样的话 - 但你将永远承担一个小而存在的维护负担。
当然,另一种选择是完全从头开始自己重写消息生成——这显然是一项更大的任务,但我最终为我的protobuf-csharp-port项目做了一个……在 C++ 版本工作之后。(不过,我的端口遵循相同的非无效方法。)