2023 年 12 月 5 日宣布的变更
Java 破坏性变更
在 v26 中,我们计划根据我们的破坏性变更政策和版本支持政策,对 Java 进行一次主版本号的升级。
以下各节概述了我们计划在 protocol buffers 26.0 版本中包含的一系列重大变更。请注意,计划可能会发生变化。这些是需要注意的潜在重大变更,但它们可能不会在这个特定版本中发生,或者根本不会发生。
对生成代码/运行时不匹配问题引入“毒丸”机制
根据我们的跨版本运行时保证,Protobuf 不支持在主版本边界之间混合使用生成的代码和运行时,也不支持在单个主运行时版本内将较新版本的 protoc 生成的代码与较旧的运行时混合使用。我们计划引入“毒丸”(poison pills)来检测和强制执行这些不允许的不匹配情况。
这不被视为一项破坏性变更,因为它只是增加了对现有政策的强制执行,但可能需要用户更新其生成的代码。
破坏与旧生成代码的兼容性
v26.x 将破坏与旧主版本生成的代码的兼容性。用户应重新生成旧的生成代码,使其与运行时版本保持一致。
例如,最初为了向后兼容 v3.x.x 运行时与 v2.x.x 生成的代码而引入的 GeneratedMessageV3,将被重命名为 GeneratedMessage。运行时将被更新以支持版本版系 (Editions),这将与旧的生成代码不兼容。
这符合我们现有的跨版本运行时保证,并且是一项破坏性变更。
移除已弃用的方法/变量
v26.x 将移除对已弃用方法和变量的访问。这些通常在之前的版本中已经被标记为 @Deprecated。
这将移除对以下(但不限于)列表的访问权限:
描述符语法 API,应替换为相应的功能访问器(例如
FieldDescriptor.hasPresence(),EnumDescriptor.isClosed())TextFormat 打印方法,应替换为相应的
TextFormat.printer()方法。PARSER 变量,应替换为
parser()方法。用于兼容旧 v2.x.x 生成代码的运行时方法。根据我们的跨版本运行时保证,这已不再受支持。
更多详细信息将在相应的版本说明中提供。