Java Proto-Namen

Namen, die vom Java protoc-Plugin generiert werden.

Dieses Dokument enthält Informationen darüber, wie der vollständig qualifizierte Java-Name eines Proto basierend auf verschiedenen Proto-Optionen lautet. Dieser Name entspricht dem Paket, das Sie importieren müssen, um diese Nachricht zu verwenden.

Empfehlung

  • Setzen Sie option java_multiple_files = true;
  • Setzen Sie option java_outer_classname = "FileNameProto";
  • Setzen Sie option java_package = "com.google.package";

Erklärung

Mehrere Dateien

Mit java_multiple_files = true wird die generierte Java-Klasse für jede Nachricht in einer separaten .java-Datei abgelegt. Dies erleichtert das Verschieben von Nachrichten von einer .proto-Datei in eine andere erheblich.

Outer Classname

Für die .proto-Datei selbst wird eine Java-Klasse generiert. Der Name der Klasse für die Datei wird automatisch generiert, wenn er nicht angegeben ist. Die Regeln, wie dieser Name generiert wird, sind jedoch übermäßig kompliziert und nicht offensichtlich. Die beste Vorgehensweise ist, die Option java_outer_classname explizit auf den Namen der .proto-Datei zu setzen, konvertiert in PascalCase, wobei der '.' entfernt wird. Zum Beispiel:

  • Die Datei student_record_request.proto sollte Folgendes festlegen:

    option java_outer_classname = "StudentRecordRequestProto";
    

Java-Paket

Das Java-Paket für generierte Bindings wird automatisch auf das Proto-Paket gesetzt. Dies entspricht jedoch normalerweise nicht den Java-Konventionen. Um einen konventionellen Java-Paketnamen sicherzustellen, empfehlen wir, die Option java_package explizit zu setzen. Innerhalb von Google ist es beispielsweise üblich, com.google. dem Proto-Paket voranzustellen.

Namen unveränderlicher API-Nachrichten

Das Java-Plugin für protoc generiert Namen gemäß dieser Tabelle.

java_multiple_filesjava_packagejava_outer_classnameGenerierter vollständiger Nachrichtenname
wahrNicht definiertignoriertcom.google.protos.$package.$message
wahrDefiniertignoriert$java_package.$message
falschNicht definiertNicht definiertcom.google.protos.$package.$derived_outer_class.$message
falschNicht definiertDefiniertcom.google.protos.$package.$java_outer_classname.$message
falschDefiniertNicht definiert$java_package.$derived_outer_class.$message
falschDefiniertDefiniert$java_package.$java_outer_classname.$message

Legende

  • $message ist der tatsächliche Name der Proto-Nachricht.

  • $package ist der Name des Proto-Pakets. Dies ist der Name, der durch die package-Direktive in der Proto-Datei angegeben wird, die sich normalerweise am Anfang der Datei befindet.

  • $derived_outer_class ist ein Name, der aus dem Namen der Proto-Datei generiert wird. Im Allgemeinen wird er berechnet, indem Satzzeichen aus dem Dateinamen entfernt und in PascalCase konvertiert werden. Wenn das Proto beispielsweise foo_bar.proto lautet, ist der Wert von $derived_outer_class FooBar.

    Wenn der generierte Klassenname mit einer der in der Proto-Datei definierten Nachrichten identisch wäre, wird OuterClass an derived_outer_class angehängt. Wenn das Proto beispielsweise foo_bar.proto lautet und eine FooBar-Nachricht enthält, ist der Wert von $derived_outer_class FooBarOuterClass. Das Gleiche gilt bei der Verwendung der v1-API, unabhängig davon, ob der Klassenname mit einer der definierten Nachrichten identisch wäre oder nicht.

  • Alle anderen $names sind die Werte der entsprechenden Dateioptionen, die in der .proto-Datei definiert sind.