Java Proto Names

Java protoc プラグインによって生成される名前。

このドキュメントでは、さまざまな proto オプションに基づいて、proto の完全修飾 Java 名が何であるかに関する情報を提供します。この名前は、そのメッセージを使用するためにインポートする必要があるパッケージに対応します。

推奨事項

  • option java_multiple_files = true; を設定します。
  • option java_outer_classname = "FileNameProto"; を設定します。
  • option java_package = "com.google.package"; を設定します。

説明

複数のファイル

java_multiple_files = true を設定すると、メッセージごとに生成された Java クラスは個別の .java ファイルに配置されます。これにより、メッセージをある .proto ファイルから別のファイルに移動することがはるかに簡単になります。

アウタークラス名

.proto ファイル自体に対して生成される Java クラスがあります。ファイルに対するクラスの名前は、指定されていない場合は自動的に生成されます。ただし、その名前がどのように生成されるかのルールは、非常に複雑でわかりにくいものです。最善のポリシーは、.proto ファイル名を PascalCase に変換し、'.' を削除したものを java_outer_classname オプションに明示的に設定することです。例:

  • ファイル student_record_request.proto は次のように設定する必要があります。

    option java_outer_classname = "StudentRecordRequestProto";
    

Java パッケージ

生成されたバインディングの Java パッケージは、proto パッケージに自動的に設定されます。ただし、これは通常、Java の慣例に準拠していません。従来の Java パッケージ名を確実にするために、java_package オプションを明示的に設定することをお勧めします。たとえば、Google 内では、慣例として com.google. を proto パッケージの先頭に付加します。

イミュータブル API メッセージ名

protoc 用の Java プラグインは、この表に従って名前を生成します。

java_multiple_filesjava_packagejava_outer_classname生成された完全メッセージ名
true未定義無視com.google.protos.$package.$message
true定義済み無視$java_package.$message
false未定義未定義com.google.protos.$package.$derived_outer_class.$message
false未定義定義済みcom.google.protos.$package.$java_outer_classname.$message
false定義済み未定義$java_package.$derived_outer_class.$message
false定義済み定義済み$java_package.$java_outer_classname.$message

凡例

  • $message は proto メッセージの実際の名前です。

  • $package は proto パッケージの名前です。これは proto ファイルの package ディレクティブで指定された名前であり、通常はファイルの先頭にあります。

  • $derived_outer_class は proto ファイル名から生成された名前です。一般に、ファイル名から句読点を取り除き、PascalCase に変換することによって計算されます。たとえば、proto が foo_bar.proto の場合、$derived_outer_class の値は FooBar です。

    生成されたクラス名が proto ファイルで定義されたメッセージのいずれかと同じになる場合、derived_outer_class には OuterClass が追加されます。たとえば、proto が foo_bar.proto であり、FooBar メッセージが含まれている場合、$derived_outer_class の値は FooBarOuterClass です。これは、v1 API を使用する場合も同様であり、クラス名が定義されたメッセージのいずれかと同じになるかどうかに関係ありません。

  • 他のすべての $names は、.proto ファイルで定義された対応するファイルオプションの値です。