Java Proto名

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クラスがあります。ファイル名のクラス名は、指定しない場合、自動的に生成されます。ただし、その名前がどのように生成されるかのルールは、過度に複雑で自明ではありません。最善のポリシーは、java_outer_classname オプションを .proto ファイル名をPascalCaseに変換し、'.' を削除した明示的に設定することです。例:

  • ファイル 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.protoFooBar メッセージを含む場合、$derived_outer_class の値は FooBarOuterClass です。これは、v1 APIを使用する場合でも、クラス名が定義されているメッセージのいずれかと同じであるかどうかに関わらず当てはまります。

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