我正在使用Google Protocol Buffers来序列化我的一些业务对象(在 Java 应用程序中)。按照教程中的建议,我将消息构建器包装在我自己的类中,该类实现 getter 和 setter 方法来访问消息的属性。optional
此外,我再次按照他们的建议声明了所有消息字段。
现在,我可以为任何包装类提供任何编码消息,它们将始终解析并接受它们。这会导致包装器对象表示它们实际上不包含的消息类型,并且会发生很多虚假事件。
将消息的二进制内容加载到包装器类中时,如果传递了错误的类型,如何使其抛出错误?
我目前正在考虑的解决方案是让所有消息都扩展一个带有必需类型字段(可能还有一个版本字段)的基本消息。如果这些字段丢失,这将使生成的构建器类抛出异常,如果它们在那里,我可以签入我自己的代码。但是,我还没有完成评估这对我的代码有什么影响,我不确定这会不会很容易。