Java Proto Names
このドキュメントでは、さまざまな 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_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
ファイルで定義された対応するファイルオプションの値です。