クラスMethodType
- すべての実装されたインタフェース:
Serializable,Constable,TypeDescriptor,TypeDescriptor.OfMethod<Class<?>, MethodType>
MethodHandle.invokeExactやMethodHandle.invokeの呼出し中およびinvokedynamic命令の実行中に、実施します。
その構 は、戻り値の型に任意の数のパラメータの型を付 したものとなります。 型(プリミティブ、void、および参照)はClassオブジェクトで表されます。 (説明が容易になるように、ここではvoidを型として扱います。 これは実際には、戻り値の型が存在しないことを示します。)
MethodTypeのすべてのインスタンスは不変です。 2つのインスタンスを比較して等しくなった 合、両者は完全に交換可能です。 等しいかどうかは、戻り値とパラメータの型のペア単位の対応関係に依存し、それ以外の要 には一切依存しません。
この型を作成できるのは、ファクトリ・メソッド けです。 すべてのファクトリ・メソッドは値をキャッシングする可能性がありますが、キャッシングが実行されるという保証はありません。 ファクトリ・メソッドの中には、静的なメソッドもあれば、(選択されたパラメータを変更するなどして)既存のメソッド型を変更する仮想メソッドもあります。
一連のパラメータの型を操作するファクトリ・メソッドには体系的に2つのバージョンが用意されていますが、これは、一連のパラメータの型をJavaの配列とJavaのリストの両方で操作できるようにするためです。 クエリー・メソッドparameterArrayとparameterListも、配列とリストの選択肢を提供しています。
MethodTypeオブジェクトがinvokedynamicなどのバイト・コード命令から、具体的には、クラス・ファイルの定数プール内の命令に関連付けられた型記述子文字列から派生されることがあります。
メソッド型はクラスや文字列の 合と同じく、クラス・ファイルの定数プール内の定数として直接表現することもできます。 メソッド型は、適切なCONSTANT_MethodType定数プール・エントリを参照するldc命令によってロードできます。 そのエントリは、記述子文字列のCONSTANT_Utf8スペリングを参照します。 (メソッド・タイプ定数の詳細は、Java Virtual Machine仕様の4.4.8および5.4.3.5の を参照してく さい。)
JVMが記述子文字列からMethodTypeを実体化するときは、記述子で指定されたすべてのクラスはアクセス可能である必要があり、それらはすべてロードされます。 (た しCONSTANT_Classの 合と同じく、クラスの初期化は不要です。) このロード処理は、MethodTypeオブジェクトがはじめて派生されるまでの任意のタイミングで発生する可能性があります。
MethodTypeは、ClassDescで表されるnominal descriptorを使用してすべてのパラメータ型および戻り型を記述できる 合にのみ、「名目書式」で記述できます。 メソッド・タイプを名目的に記述できる 合は、次のようになります:
- メソッド・タイプには、
MethodType::describeConstableによって返されるnominal descriptorがあります。 - メソッド・タイプに対して
MethodType::descriptorStringまたはMethodType::toMethodDescriptorStringによって返される記述子文字列は、メソッド記述子(JVMS 4.3.3)です。
パラメータ型または戻り型のいずれかを名目的に記述できない 合、つまりClass::describeConstableがその型に対して空のオプションを返す 合、メソッド型を名目的に記述することはできません:
- メソッド・タイプには
nominal descriptorがなく、MethodType::describeConstableは空のオプションを返します。 - メソッド・タイプに対して
MethodType::descriptorStringまたはMethodType::toMethodDescriptorStringによって返された記述子文字列がタイプ記述子ではありません。
- 導入されたバージョン:
- 1.7
- 関連 目:
-
ネストされたクラスのサマリー
インタフェースjava.lang.invoke.TypeDescriptorで宣言されたネストされたクラス/インタフェース
TypeDescriptor.OfField<F extends TypeDescriptor.OfField<F>>, TypeDescriptor.OfMethod<F extends TypeDescriptor.OfField<F>, M extends TypeDescriptor.OfMethod<F,M>> -
メソッドのサマリー
修飾子と型メソッド説明appendParameterTypes(Class<?>... ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。appendParameterTypes(List<Class<?>> ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。changeParameterType(int num, Class<?> nptype) 1つのパラメータの型が異なるメソッド型を検索または作成します。changeReturnType(Class<?> nrtype) 戻り値の型が異なるメソッド型を検索または作成します。このインスタンスの名目記述子を返します(作成可能な 合)、作成できない 合は空のOptionalを返します。このメソッド・タイプの記述子文字列を返します。dropParameterTypes(int start, int end) いくつかのパラメータの型が削除されたメソッド型を検索または作成します。boolean指定されたオブジェクトがこの型と等しいかどうかを比較します。erase()すべての参照型を消去してObjectにします。static MethodTypefromMethodDescriptorString(String descriptor, ClassLoader loader) 指定されたメソッド記述子(JVMS 4.3.3)のメソッド・タイプのインスタンスを検索または作成します。generic()すべての型(参照とプリミティブの両方)をObjectに変換します。static MethodTypegenericMethodType(int objectArgCount) コンポーネントがすべてObjectであるようなメソッド型を検索または作成します。static MethodTypegenericMethodType(int objectArgCount, boolean finalArray) Objectとオプションで末尾のObject[]配列をコンポーネントに持つメソッド型を検索または作成します。inthashCode()このメソッド型のハッシュ・コード値を返します。booleanこの型にプリミティブの引数または戻り値が含まれているかどうかを 告します。booleanこの型にラッパーの引数または戻り値が含まれているかどうかを 告します。insertParameterTypes(int num, Class<?>... ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。insertParameterTypes(int num, List<Class<?>> ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。Class<?> このメソッド型の最後のパラメータ型を返します。static MethodTypemethodType(Class<?> rtype) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodTypemethodType(Class<?> rtype, Class<?> ptype0) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodTypemethodType(Class<?> rtype, Class<?>[] ptypes) 指定されたメソッド型のインスタンスを検索または作成します。static MethodTypemethodType(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodTypemethodType(Class<?> rtype, MethodType ptypes) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodTypemethodType(Class<?> rtype, List<Class<?>> ptypes) 指定されたコンポーネントを持つメソッド型を検索または作成します。Class<?>[]パラメータの型を配列として提供します(簡易メソッド)。intこのメソッド型に含まれるパラメータの型の数を返します。パラメータの型をリストとして提供します(簡易メソッド)。Class<?> parameterType(int num) このメソッド型の中の指定されたインデックスのパラメータの型を返します。Class<?> このメソッド型の戻り値の型を返します。このメソッド・タイプの記述子文字列を返します。toString()メソッド型の文字列表現を"(PT0,PT1...)RT"の形式で返します。unwrap()すべてのラッパー型を対応するプリミティブ型に変換します。wrap()すべてのプリミティブ型を対応するラッパー型に変換します。
-
メソッドの詳細
-
methodType
public static MethodType methodType(Class<?> rtype, Class<?>[] ptypes) 指定されたメソッド型のインスタンスを検索または作成します。- パラメータ:
rtype- 戻り値の型ptypes- パラメータの型- 戻り値:
- 指定されたコンポーネントを持つメソッド型
- スロー:
NullPointerException-rtypeまたはptypesがnullであるか、ptypesのいずれかの要 がnullである 合IllegalArgumentException-ptypesのいずれかの要 がvoid.classである 合
-
methodType
public static MethodType methodType(Class<?> rtype, List<Class<?>> ptypes) 指定されたコンポーネントを持つメソッド型を検索または作成します。methodTypeの簡易メソッド。- パラメータ:
rtype- 戻り値の型ptypes- パラメータの型- 戻り値:
- 指定されたコンポーネントを持つメソッド型
- スロー:
NullPointerException-rtypeまたはptypesがnullであるか、ptypesのいずれかの要 がnullである 合IllegalArgumentException-ptypesのいずれかの要 がvoid.classである 合
-
methodType
public static MethodType methodType(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes) - パラメータ:
rtype- 戻り値の型ptype0- 最初のパラメータ型ptypes- 残りのパラメータ型- 戻り値:
- 指定されたコンポーネントを持つメソッド型
- スロー:
NullPointerException-rtype、ptype0、ptypesのいずれかがnullであるか、ptypesのいずれかの要 がnullである 合IllegalArgumentException-ptype0またはptypes、あるいはptypesのいずれかの要 がvoid.classの 合
-
methodType
public static MethodType methodType(Class<?> rtype) - パラメータ:
rtype- 戻り値の型- 戻り値:
- 指定された戻り値を含むメソッド型
- スロー:
NullPointerException-rtypeがnullである 合
-
methodType
public static MethodType methodType(Class<?> rtype, Class<?> ptype0) - パラメータ:
rtype- 戻り値の型ptype0- パラメータ型- 戻り値:
- 指定された戻り値とパラメータの型を持つメソッド型
- スロー:
NullPointerException-rtypeまたはptype0がnullの 合IllegalArgumentException-ptype0がvoid.classである 合
-
methodType
public static MethodType methodType(Class<?> rtype, MethodType ptypes) - パラメータ:
rtype- 戻り値の型ptypes- パラメータ型を提供するメソッド型- 戻り値:
- 指定されたコンポーネントを持つメソッド型
- スロー:
NullPointerException-rtypeまたはptypesがnullの 合
-
genericMethodType
public static MethodType genericMethodType(int objectArgCount, boolean finalArray) Objectとオプションで末尾のObject[]配列をコンポーネントに持つメソッド型を検索または作成します。methodTypeの簡易メソッド。 パラメータと戻り値の型はすべてObjectですが、最後の配列パラメータが存在する 合はそのかぎりではなく、その型はObject[]になります。- パラメータ:
objectArgCount- パラメータの数(最後の配列パラメータが存在する 合、それは含まない)finalArray-Object[]型の末尾の配列パラメータが存在するかどうか- 戻り値:
- 指定された固定数の引数と、追 の引数が集められた1つの配列が渡されるすべての呼出しに対し、汎用的に適用可能なメソッド型
- スロー:
IllegalArgumentException-objectArgCountが であるか255 (finalArrayがtrueの 合は254)より大きい 合- 関連 目:
-
genericMethodType
public static MethodType genericMethodType(int objectArgCount) - パラメータ:
objectArgCount- パラメータの数- 戻り値:
- 指定された数の引数が渡されるすべての呼出しに対し、汎用的に適用可能なメソッド型
- スロー:
IllegalArgumentException-objectArgCountが であるか255より大きい 合- 関連 目:
-
changeParameterType
public MethodType changeParameterType(int num, Class<?> nptype) 1つのパラメータの型が異なるメソッド型を検索または作成します。methodTypeの簡易メソッド。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のchangeParameterType - パラメータ:
num- 変更するパラメータ型の(ゼロから始まる)インデックスnptype- 古いパラメータの型を置き換える新しいパラメータの型- 戻り値:
- 同じ型、た し選択されたパラメータを変更したもの
- スロー:
IndexOutOfBoundsException-numがparameterArray()の有効なインデックスでない 合IllegalArgumentException-nptypeがvoid.classである 合NullPointerException-nptypeがnullである 合
-
insertParameterTypes
public MethodType insertParameterTypes(int num, Class<?>... ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。methodTypeの簡易メソッド。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のinsertParameterTypes - パラメータ:
num- 挿入するパラメータの型の(ゼロから始まる)位置ptypesToInsert- パラメータ・リスト内に挿入するゼロ個以上の新しいパラメータの型- 戻り値:
- 同じ型、た し選択されたパラメータを挿入したもの
- スロー:
IndexOutOfBoundsException-numが であるかparameterCount()より大きい 合IllegalArgumentException-ptypesToInsertのいずれかの要 がvoid.classである 合、または結果となるメソッド型のパラメータ・スロット数が255個を超える 合NullPointerException-ptypesToInsertまたはそのいずれかの要 がnullの 合
-
appendParameterTypes
public MethodType appendParameterTypes(Class<?>... ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。methodTypeの簡易メソッド。- パラメータ:
ptypesToInsert- パラメータ・リストの末尾のあとに挿入するゼロ個以上の新しいパラメータの型- 戻り値:
- 同じ型、た しその末尾に選択されたパラメータを追 したもの
- スロー:
IllegalArgumentException-ptypesToInsertのいずれかの要 がvoid.classである 合、または結果となるメソッド型のパラメータ・スロット数が255個を超える 合NullPointerException-ptypesToInsertまたはそのいずれかの要 がnullの 合
-
insertParameterTypes
public MethodType insertParameterTypes(int num, List<Class<?>> ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。methodTypeの簡易メソッド。- パラメータ:
num- 挿入するパラメータの型の(ゼロから始まる)位置ptypesToInsert- パラメータ・リスト内に挿入するゼロ個以上の新しいパラメータの型- 戻り値:
- 同じ型、た し選択されたパラメータを挿入したもの
- スロー:
IndexOutOfBoundsException-numが であるかparameterCount()より大きい 合IllegalArgumentException-ptypesToInsertのいずれかの要 がvoid.classである 合、または結果となるメソッド型のパラメータ・スロット数が255個を超える 合NullPointerException-ptypesToInsertまたはそのいずれかの要 がnullの 合
-
appendParameterTypes
public MethodType appendParameterTypes(List<Class<?>> ptypesToInsert) 追 のパラメータの型を持つメソッド型を検索または作成します。methodTypeの簡易メソッド。- パラメータ:
ptypesToInsert- パラメータ・リストの末尾のあとに挿入するゼロ個以上の新しいパラメータの型- 戻り値:
- 同じ型、た しその末尾に選択されたパラメータを追 したもの
- スロー:
IllegalArgumentException-ptypesToInsertのいずれかの要 がvoid.classである 合、または結果となるメソッド型のパラメータ・スロット数が255個を超える 合NullPointerException-ptypesToInsertまたはそのいずれかの要 がnullの 合
-
dropParameterTypes
public MethodType dropParameterTypes(int start, int end) いくつかのパラメータの型が削除されたメソッド型を検索または作成します。methodTypeの簡易メソッド。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のdropParameterTypes - パラメータ:
start- 削除する最初のパラメータ型の(ゼロから始まる)インデックスend- 削除しない最初のパラメータ型の(startより大きい)インデックス- 戻り値:
- 同じ型、た し選択されたパラメータを削除したもの
- スロー:
IndexOutOfBoundsException-startが であるかparameterCount()より大きい 合、またはendが であるかparameterCount()より大きい 合、またはstartがendより大きい 合
-
changeReturnType
public MethodType changeReturnType(Class<?> nrtype) 戻り値の型が異なるメソッド型を検索または作成します。methodTypeの簡易メソッド。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のchangeReturnType - パラメータ:
nrtype- 古い戻り値パラメータの型を置き換える戻り値パラメータの型- 戻り値:
- 同じ型、た し戻り値の型を変更したもの
- スロー:
NullPointerException-nrtypeがnullである 合
-
hasPrimitives
public boolean hasPrimitives()この型にプリミティブの引数または戻り値が含まれているかどうかを 告します。 戻り値の型voidはプリミティブとしてカウントされます。- 戻り値:
- いずれかの型がプリミティブの 合はtrue
-
hasWrappers
public boolean hasWrappers()この型にラッパーの引数または戻り値が含まれているかどうかを 告します。 ラッパーとは、プリミティブ値をボクシングした型(Integerなど)のことです。 参照型java.lang.Voidが戻り値の型として含まれている 合、それはラッパーとしてカウントされます。- 戻り値:
- いずれかの型がラッパーの 合はtrue
-
erase
public MethodType erase()- 戻り値:
- 元の型のすべての参照型を置き換えたバージョン
-
generic
public MethodType generic()すべての型(参照とプリミティブの両方)をObjectに変換します。genericMethodTypeの簡易メソッド。 式type.wrap().erase()はtype.generic()と同じ値を生成します。- 戻り値:
- 元の型のすべての型を置き換えたバージョン
-
wrap
public MethodType wrap()すべてのプリミティブ型を対応するラッパー型に変換します。methodTypeの簡易メソッド。 参照型(ラッパー型も含む)はすべて変更されずに残ります。 戻り値の型voidは型java.lang.Voidに変更されます。 式type.wrap().erase()はtype.generic()と同じ値を生成します。- 戻り値:
- 元の型のすべてのプリミティブ型を置き換えたバージョン
-
unwrap
public MethodType unwrap()すべてのラッパー型を対応するプリミティブ型に変換します。methodTypeの簡易メソッド。 すべてのプリミティブ型(voidを含む)は変更されないまま残ります。 戻り値の型java.lang.Voidはvoidに変更されます。- 戻り値:
- 元の型のすべてのラッパー型を置き換えたバージョン
-
parameterType
public Class<?> parameterType(int num) このメソッド型の中の指定されたインデックスのパラメータの型を返します。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のparameterType - パラメータ:
num- 目的とするパラメータの型の(ゼロから始まる)インデックス- 戻り値:
- 選択されたパラメータの型
- スロー:
IndexOutOfBoundsException-numがparameterArray()の有効なインデックスでない 合
-
parameterCount
public int parameterCount()このメソッド型に含まれるパラメータの型の数を返します。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のparameterCount - 戻り値:
- パラメータの型の数
-
returnType
public Class<?> returnType()このメソッド型の戻り値の型を返します。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のreturnType - 戻り値:
- 戻り型
-
parameterList
パラメータの型をリストとして提供します(簡易メソッド)。 このリストは不変です。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のparameterList - 戻り値:
- パラメータの型(不変リストとして)
-
lastParameterType
public Class<?> lastParameterType()このメソッド型の最後のパラメータ型を返します。 このタイプにパラメータがない 合、代わりにセンチ・ネル値void.classが返されます。- APIのノート:
センチ・ネル値は、結果問合せ値に対して直接的に反 問合せを作成できるように選択されます。
voidはパラメータ型として受け入れられないので、センチ・ネル値と実際のパラメータを混同することはできません。 可変アリティ呼び出しモードの 合、式lastParameterType().getComponentType()は"varargs"パラメータのタイプを問合せするのに便利です。- 戻り値:
- 最後のパラメータ型があれば、それ以外は
void.class - 導入されたバージョン:
- 10
-
parameterArray
public Class<?>[] parameterArray()パラメータの型を配列として提供します(簡易メソッド)。 この配列を変更しても、型は変更されません。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>, MethodType>内のparameterArray - 戻り値:
- パラメータの型(必要な 合は新規のコピーとして)
-
equals
-
hashCode
-
toString
-
fromMethodDescriptorString
public static MethodType fromMethodDescriptorString(String descriptor, ClassLoader loader) throws IllegalArgumentException, TypeNotPresentException 指定されたメソッド記述子(JVMS 4.3.3)のメソッド・タイプのインスタンスを検索または作成します。 このメソッドは、methodTypeの便利なメソッドです。 記述子文字列に埋め込まれたクラスまたはインタフェース名は、指定されたローダー (またはnullの 合、システ ・クラス・ローダー)によって解決されます。- APIのノート:
- 有効な記述子があるが、このメソッドでは構成できないメソッド・タイプは、コンポーネント・タイプが共通クラス・ローダーからは見えないため、検出できます。
このメソッドは、メソッド・ハンドルや
invokedynamicを処理するバイト・コードを生成する必要があるアプリケーションのために含まれています。 - パラメータ:
descriptor- メソッド記述子文字列loader- 型の検索先となるクラス・ローダー- 戻り値:
- 指定されたメソッド記述子のメソッド・タイプ
- スロー:
NullPointerException- 文字列がnullの 合IllegalArgumentException- 文字列がメソッド記述子でない 合TypeNotPresentException- 指定された型を見つけられない 合- Java Virtual Machine仕様を参照してく さい:
-
4.3.3 メソッド記述子
-
toMethodDescriptorString
public String toMethodDescriptorString()このメソッド・タイプの記述子文字列を返します。 このメソッドは、MethodType::descriptorStringのコールと同等です。- APIのノート:
- これは、メソッド・タイプ記述子(JVMS 4.3.3)および適切なクラス・ローダー引数を必要とする
fromMethodDescriptorStringの厳密な逆ではありません。 2つの異なるMethodTypeオブジェクトには、異なるクラスが同じ名前を持つことができますが、異なるクラス・ローダーを持つことができるため、同じ記述子文字列を使用できます。このメソッドは、メソッド・ハンドルや
invokedynamicを処理するバイト・コードを生成する必要があるアプリケーションのために含まれています。 - 戻り値:
- このメソッド・タイプの記述子文字列
- Java Virtual Machine仕様を参照してく さい:
-
4.3.3 メソッド記述子
- 関連 目:
-
descriptorString
public String descriptorString()このメソッド・タイプの記述子文字列を返します。このメソッド型が「名目的に記述」の 合、結果はメソッド型記述子(JVMS 4.3.3)になります。 このメソッド・タイプの
MethodTypeDescは、結果記述子文字列を指定してMethodTypeDesc::ofDescriptorをコールすることで生成できます。このメソッド・タイプを「名目的に記述」にできず、結果が次の形式の文字列である 合:
"(<parameter-descriptors>)<return-descriptor>"<parameter-descriptors>は、すべてのパラメータ型と戻り型の「記述子文字列」の「記述子文字列」を連結したものです。 結果文字列からMethodTypeDescを生成できません。- 定義:
- インタフェース
TypeDescriptor内のdescriptorString - 戻り値:
- このメソッド・タイプの記述子文字列
- Java Virtual Machine仕様を参照してく さい:
-
4.3.3 メソッド記述子
- 導入されたバージョン:
- 12
- 関連 目:
-
describeConstable
public Optional<MethodTypeDesc> describeConstable()このインスタンスの名目記述子を返します(作成可能な 合)、作成できない 合は空のOptionalを返します。- 定義:
- インタフェース
Constable内のdescribeConstable - 戻り値:
- 最終的な名目記述子を含む
Optional、または作成できない 合は空のOptional。 - 導入されたバージョン:
- 12
- 関連 目:
-