Änderungen angekündigt am 14. Juli 2025
Deprecation von FieldDescriptor Enums
Wir kündigen eine bevorstehende Änderung bezüglich des FieldDescriptor-Enums und seiner zugehörigen Werte für optional, erforderlich und wiederholt an. Diese werden als veraltet markiert, da wir die Verwendung präziserer Zugriffsmethoden empfehlen.
Hintergrund
Obwohl das FieldDescriptor.label-Enum einst seinen Zweck erfüllte, hat die Weiterentwicklung von Protocol Buffers idiomatischere Wege zur Bestimmung der Kardinalität (einzeln/wiederholt) und der Präsenzsemantik eines Feldes eingeführt.
- In proto2 sind
optional,requiredundrepeatedexplizite Schlüsselwörter. - In proto3 wird
requirednicht mehr unterstützt. Alle Skalarfelder sind implizit "optional" in dem Sinne, dass sie Standardwerte haben, wenn sie nicht gesetzt sind. Dasoptional-Schlüsselwort wurde später in proto3 wieder eingeführt, um die Präsenz für Skalarfelder explizit zu verfolgen (Unterscheidung zwischen einem nicht gesetzten Feld und einem Feld, das auf seinen Standardwert gesetzt ist). - In der Edition 2023 haben wir die Schlüsselwörter
optionalundrequiredentfernt und Funktionen zur Steuerung dieser Verhaltensweisen verwendet.
Das label-Enum vermischt diese unterschiedlichen Konzepte (Kardinalität, Erforderlichkeit und explizite Präsenzverfolgung), was zu potenziellen Verwirrungen führt, insbesondere mit dem Präsenzmodell für Felder in proto3.
Auswirkungen und Migration
Das Feld FieldDescriptor.label wird schließlich aus der API entfernt.
Beachten Sie, dass die Methodennamen in diesem Thema in einigen Sprachen geringfügig anders geschrieben sein können.
- Für Protocol Buffer Editions Felder
- Wichtige Methoden für Editionen
hasPresencewird zur primären Methode, um zu bestimmen, ob ein einzelnes Feld die Präsenz verfolgt, und spiegelt die Einstellungfeatures.field_presencefür dieses Feld wider.
- Migration: Verlassen Sie sich auf
isRepeatedundisRequiredfür die Kardinalität undhasPresence, um die explizite Präsenzverfolgung bei einzelnen Feldern zu überprüfen.
- Wichtige Methoden für Editionen
- Für proto2/proto3 Felder:
getLabelwird schließlich entfernt und ist derzeit nicht zu empfehlen.
Alle Benutzer von Protocol Buffers, die mit FieldDescriptor-Objekten in ihrem Code interagieren (z. B. für Code-Generierung, Reflexion und dynamische Nachrichtenbehandlung), sollten davon absehen, FieldDescriptor.label direkt zu verwenden.
Aktualisieren Sie stattdessen Ihren Code, um die folgenden Methoden zu verwenden
- Um zu überprüfen, ob ein Feld wiederholt ist:
field.isRepeated - Um zu überprüfen, ob ein Feld erforderlich ist (nur proto2 und Editionen):
field.isRequired - Um zu überprüfen, ob ein einzelnes Feld explizite Präsenz hat, verwenden Sie
hasPresence
Zeitplan
Diese Verfallsklausel tritt sofort in Kraft. Obwohl getLabel weiterhin funktioniert, empfehlen wir eine proaktive Migration Ihres Codes, um die zukünftige Kompatibilität und Klarheit zu gewährleisten. Diese Änderung wird zu einer robusteren und verständlicheren Erfahrung für Entwickler führen, die Protocol Buffers verwenden.