- すべての実装されたインタフェース:
Serializable,Constable,TypeDescriptor,TypeDescriptor.OfMethod<Class<?>,MethodType>
public final class MethodType extends Object implements Constable, TypeDescriptor.OfMethod<Class<?>,MethodType>, Serializable
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 Specification』のセクション4.4.8および5.4.3.5を参照してください。)
JVMが記述子文字列からMethodTypeを実体化するときは、記述子で指定されたすべてのクラスはアクセス可能である必要があり、それらはすべてロードされます。 (ただしCONSTANT_Classの場合と同じく、クラスの初期化は不要です。) このロード処理は、MethodTypeオブジェクトがはじめて派生されるまでの任意のタイミングで発生する可能性があります。
- 導入されたバージョン:
- 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>> -
メソッドのサマリー
修飾子と型 メソッド 説明 MethodTypeappendParameterTypes(クラス<?>... ptypesToInsert)追加のパラメータの型を持つメソッド型を検索または作成します。MethodTypeappendParameterTypes(List<クラス<?>> ptypesToInsert)追加のパラメータの型を持つメソッド型を検索または作成します。MethodTypechangeParameterType(int num, Class<?> nptype)1つのパラメータの型が異なるメソッド型を検索または作成します。MethodTypechangeReturnType(クラス<?> nrtype)戻り値の型が異なるメソッド型を検索または作成します。Optional<MethodTypeDesc>describeConstable()このインスタンスの名目記述子を返します(作成可能な場合)、作成できない場合は空のOptionalを返します。StringdescriptorString()このタイプのフィールド・タイプ記述子文字列を返しますMethodTypedropParameterTypes(int start, int end)いくつかのパラメータの型が削除されたメソッド型を検索または作成します。booleanequals(Object x)指定されたオブジェクトがこの型と等しいかどうかを比較します。MethodTypeerase()すべての参照型を消去してObjectにします。static MethodTypefromMethodDescriptorString(String descriptor, ClassLoader loader)バイト・コード記述子のスペリングに基づいてメソッド型のインスタンスを検索または作成します。MethodTypegeneric()すべての型(参照とプリミティブの両方)をObjectに変換します。static MethodTypegenericMethodType(int objectArgCount)コンポーネントがすべてObjectであるようなメソッド型を検索または作成します。static MethodTypegenericMethodType(int objectArgCount, boolean finalArray)Objectとオプションで末尾のObject[]配列をコンポーネントに持つメソッド型を検索または作成します。inthashCode()このメソッド型のハッシュ・コード値を返します。booleanhasPrimitives()この型にプリミティブの引数または戻り値が含まれているかどうかを報告します。booleanhasWrappers()この型にラッパーの引数または戻り値が含まれているかどうかを報告します。MethodTypeinsertParameterTypes(int num, Class<?>... ptypesToInsert)追加のパラメータの型を持つメソッド型を検索または作成します。MethodTypeinsertParameterTypes(int num, List<Class<?>> ptypesToInsert)追加のパラメータの型を持つメソッド型を検索または作成します。Class<?>lastParameterType()このメソッド型の最後のパラメータ型を返します。static MethodTypemethodType(クラス<?> 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<?>[]parameterArray()パラメータの型を配列として提供します(簡易メソッド)。intparameterCount()このメソッド型に含まれるパラメータの型の数を返します。List<Class<?>>parameterList()パラメータの型をリストとして提供します(簡易メソッド)。Class<?>parameterType(int num)このメソッド型の中の指定されたインデックスのパラメータの型を返します。Class<?>returnType()このメソッド型の戻り値の型を返します。StringtoMethodDescriptorString()メソッド型のバイト・コード記述子表現を生成します。StringtoString()メソッド型の文字列表現を"(PT0,PT1...)RT"の形式で返します。MethodTypeunwrap()すべてのラッパー型を対応するプリミティブ型に変換します。MethodTypewrap()すべてのプリミティブ型を対応するラッパー型に変換します。
-
メソッドの詳細
-
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(int)
-
genericMethodType
public static MethodType genericMethodType(int objectArgCount)- パラメータ:
objectArgCount- パラメータの数- 戻り値:
- 指定された数の引数が渡されるすべての呼出しに対し、汎用的に適用可能なメソッド型
- 例外:
IllegalArgumentException-objectArgCountが負であるか255より大きい場合- 関連項目:
genericMethodType(int, boolean)
-
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(クラス<?>... 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<クラス<?>> 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(クラス<?> 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 クラス<?> parameterType(int num)このメソッド型の中の指定されたインデックスのパラメータの型を返します。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>,MethodType>内のparameterType - パラメータ:
num- 目的とするパラメータの型の(ゼロから始まる)インデックス- 戻り値:
- 選択されたパラメータの型
- 例外:
IndexOutOfBoundsException-numがparameterArray()の有効なインデックスでない場合
-
parameterCount
public int parameterCount()このメソッド型に含まれるパラメータの型の数を返します。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>,MethodType>内のparameterCount - 戻り値:
- パラメータの型の数
-
returnType
public クラス<?> returnType()このメソッド型の戻り値の型を返します。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>,MethodType>内のreturnType - 戻り値:
- 戻り値の型
-
parameterList
パラメータの型をリストとして提供します(簡易メソッド)。 このリストは不変です。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>,MethodType>内のparameterList - 戻り値:
- パラメータの型(不変リストとして)
-
lastParameterType
public クラス<?> lastParameterType()このメソッド型の最後のパラメータ型を返します。 このタイプにパラメータがない場合、代わりにセンチ・ネル値void.classが返されます。- APIの注:
センチ・ネル値は、結果問合せ値に対して直接的に反映問合せを作成できるように選択されます。
voidはパラメータ型として受け入れられないので、センチ・ネル値と実際のパラメータを混同することはできません。 可変アリティ呼び出しモードの場合、式lastParameterType().getComponentType()は"varargs"パラメータのタイプを問合せするのに便利です。- 戻り値:
- 最後のパラメータ型があれば、それ以外は
void.class - 導入されたバージョン:
- 10
-
parameterArray
public クラス<?>[] parameterArray()パラメータの型を配列として提供します(簡易メソッド)。 この配列を変更しても、型は変更されません。- 定義:
- インタフェース
TypeDescriptor.OfMethod<Class<?>,MethodType>内のparameterArray - 戻り値:
- パラメータの型(必要な場合は新規のコピーとして)
-
equals
public boolean equals(Object x)指定されたオブジェクトがこの型と等しいかどうかを比較します。 つまり、その戻り値がtrueになるのは、指定されたオブジェクトもまた、まったく同じパラメータと戻り値の型を持つメソッド型である場合だけです。- オーバーライド:
equals、クラス:Object- パラメータ:
x- 比較するオブジェクト- 戻り値:
- このオブジェクトがobj引数と同じである場合は
true、それ以外の場合はfalse。 - 関連項目:
Object.equals(Object)
-
hashCode
public int hashCode()このメソッド型のハッシュ・コード値を返します。 要素として戻り値の型のあとにパラメータの型を持つようなListのハッシュ・コードと同じであると定義されています。- オーバーライド:
hashCode、クラス:Object- 戻り値:
- このメソッド型のハッシュ・コード値
- 関連項目:
Object.hashCode(),equals(Object),List.hashCode()
-
toString
public String toString()メソッド型の文字列表現を"(PT0,PT1...)RT"の形式で返します。 メソッド型の文字列表現は、型名のカンマ区切りリストをカッコで囲んだものの直後に、戻り値の型を付加したものになります。各型は
単純名で表現されます。 -
fromMethodDescriptorString
public static MethodType fromMethodDescriptorString(String descriptor, ClassLoader loader) throws IllegalArgumentException, TypeNotPresentExceptionバイト・コード記述子のスペリングに基づいてメソッド型のインスタンスを検索または作成します。methodTypeの簡易メソッド。 記述子文字列に埋め込まれたすべてのクラス名またはインタフェース名を解決するため、指定されたローダー(それがnullの場合はシステム・クラス・ローダー)のClassLoader.loadClass(java.lang.String)が呼び出されます。一般的なクラス・ローダーからすべてのコンポーネントの型に必ずしも到達できないため、このメソッドでは構築できないメソッド型に遭遇する可能性があります。
このメソッドは、メソッド・ハンドルや
invokedynamicを処理するバイト・コードを生成する必要があるアプリケーションのために含まれています。- パラメータ:
descriptor- バイトコードレベルの型記述子の文字列「(T...)T」loader- 型の検索先となるクラス・ローダー- 戻り値:
- バイトコードレベルの型記述子に一致するメソッド型
- 例外:
NullPointerException- 文字列がnullの場合IllegalArgumentException- 文字列が整形式でない場合TypeNotPresentException- 指定された型を見つけられない場合
-
toMethodDescriptorString
public String toMethodDescriptorString()メソッド型のバイト・コード記述子表現を生成します。これは厳密には、
fromMethodDescriptorStringの逆の操作ではありません。 共通の名前を共有しているが異なるクラス・ローダーを持つ異なる2つのクラスは、記述子文字列内では同一のものと見なされます。このメソッドは、メソッド・ハンドルや
invokedynamicを処理するバイト・コードを生成する必要があるアプリケーションのために含まれています。fromMethodDescriptorString、後者は適切なクラス・ローダー引数を必要とするためです。- 戻り値:
- バイト・コードの型記述子の表現
-
descriptorString
public String descriptorString()このタイプのフィールド・タイプ記述子文字列を返します- 定義:
- インタフェース
TypeDescriptor内のdescriptorString - 戻り値:
- 記述子文字列
- Java Virtual Machine仕様を参照してください:
-
4.3.2 フィールド記述子
- 導入されたバージョン:
- 12
-
describeConstable
public オプショナル<MethodTypeDesc> describeConstable()このインスタンスの名目記述子を返します(作成可能な場合)、作成できない場合は空のOptionalを返します。- 定義:
- インタフェース
Constable内のdescribeConstable - 戻り値:
- 最終的な名目記述子を含む
Optional、または作成できない場合は空のOptional。 - 導入されたバージョン:
- 12
-