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