モジュール java.compiler
パッケージjavax.lang.model
パッケージjavax.lang.model
「Java言語モデル」を構成するパッケージの型と階層。Javaプログラミング言語の宣言と型をモデル化する反射型APIです。 このパッケージのメンバーとサブパッケージは、言語のモデル化および言語処理のタスクとAPIに使用されます。これらには、注釈処理のフレームワークが含まれますが、それだけではありません。
メソッドの戻り型は、
この言語モデルは、ミラー・ベースの設計に従います。詳細については、次を参照してください。
Gilad Bracha、David Ungar著。 『Mirrors: Design Principles for Meta-level Facilities of Object-Oriented Programming Languages』。 2004年10月ACM Conference on Object-Oriented Programming, Systems, Languages and Applicationsの議事録特に、モデルは、
java.util.Set
を表すelementなどの宣言された言語構成メンバーと、raw型java.util.Set
、 java.util.Set<String>
およびjava.util.Set<T>
などの要素と関連付けられるtypesのファミリとは区別します。
特に指定されないかぎり、このパッケージのメソッドはnull
引数が渡されるとNullPointerException
をスローします。
要素およびタイプ
定義と用途
大まかに言えば、element
パッケージは要素の宣言(「定義」)をモデル化し、type
パッケージは型のusesをモデル化します。 一般に、個別に使用すると、定義に関連付けられた情報とは別に個別化された情報を持つことができます。 ある意味では、定義内の情報はすべての用途で共有されます。
たとえば、次の文字列処理メソッド identityOrEmpty
で java.lang.String
を使用するとします。
// Return the argument if it is non-null and the empty string otherwise.
public static @DefinitelyNotNull String identityOrEmpty(@MightBeNull String argument) {
...
}
@DefinitelyNotNull
型の注釈が付いたString
で、パラメータの型は、 @MightBeNull
型の注釈が付いたString
です。 リフレクティブAPIでは、注釈のセットは型として String
の2つのusesで異なるため、これらの2つのケースを区別するために、戻り型と引数型を異なるオブジェクトで表す必要があります。 java.lang.String
自体のdefinitionには、該当する型注釈のどちらも注釈が付けられません。
別の例として、1つの型パラメータを持つ汎用インタフェース(JLS 9.1.2) java.util.Set
の宣言を考えてみます。 この宣言は、java.util.Set<String>
、 java.util.Set<E>
、java.util.Set<?>
、RAW型(JLS 4.8) java.util.Set
など、その宣言から導出された多数のパラメータ化された型(JLS 4.5)間の共通性をキャプチャします。
エレメントとタイプ間のマッピング
概念は異なりますが、要素と型の間には、定義と用途の間に双方向の(partial)マッピングがあります。 たとえば、大まかに言えば、型のすべての用途で不変になる情報は、型を定義する要素から取得できます。 たとえば、DeclaredType
型ミラー・モデリングでjava.lang.String
を使用するとします。 DeclaredType.asElement()
をコールすると、 java.lang.String
のTypeElement
が返されます。 TypeElement
から、nameやmodifiersなどの共通情報を取得できます。
すべての要素は、あるタイプで「マップ先」にできます。 クラスおよびインタフェースの要素は、「マップ先」に「プロトタイプ」を取得します。 逆に、通常、多くの型が同じ「type要素」にマップできます。 たとえば、RAW型java.util.Set
の型ミラー、プロトタイプ型java.util.Set<E>
および型 java.util.Set<String>
は、すべてjava.util.Set
の型要素を「マップ先」します。 いくつかのタイプの型を要素にマップできますが、他のタイプの型には「要素マッピング」がありません。 たとえば、前述のように、「実行可能タイプ」の型ミラーには要素マッピングがありませんが、「宣言型」は「type要素」にマップされます。
- 導入されたバージョン:
- 1.6
- 関連項目:
-
クラス説明注釈付け可能なコンストラクトを表します。Javaプログラミング言語のソース・バージョン。未知の種類のエンティティが検出されたことを示す例外のスーパー・クラスです。