覆盖协议缓冲区在将null设置为字段时抛出NPE的默认行为

时间:2013-04-08 03:28:11

标签: java protocol-buffers

我使用协议缓冲区maven插件来编译.proto个文件。我真的很喜欢协议缓冲区,除了一件事它不接受nulls作为默认值或没有值。相反,只要传递null,它就会抛出NPE。防止这种NPE不必要地增加了代码,太多了&无论如何,我真的想避免这种情况!

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

1 个答案:

答案 0 :(得分:0)

  

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

简单地说,您需要更改消息生成器代码。它很复杂,但 并不复杂。缺点是它在C ++中......当然,你需要在将来维护你的分支,或者以当前的形式坚持使用protobuf。

您可能希望从查看java_string_field.ccjava_message_field.cc开始。

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

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