Java Proto名
このドキュメントには、異なる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_files | java_package | java_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ファイルで定義されている対応するファイルオプションの値です。