- すべての実装されたインタフェース:
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 MethodType
fromMethodDescriptorString
(String descriptor, ClassLoader loader) 指定されたメソッド記述子(JVMS 4.3.3)のメソッド・タイプのインスタンスを検索または作成します。generic()
すべての型(参照とプリミティブの両方)をObject
に変換します。static MethodType
genericMethodType
(int objectArgCount) コンポーネントがすべてObject
であるようなメソッド型を検索または作成します。static MethodType
genericMethodType
(int objectArgCount, boolean finalArray) Object
とオプションで末尾のObject[]
配列をコンポーネントに持つメソッド型を検索または作成します。int
hashCode()
このメソッド型のハッシュ・コード値を返します。boolean
この型にプリミティブの引数または戻り値が含まれているかどうかを報告します。boolean
この型にラッパーの引数または戻り値が含まれているかどうかを報告します。insertParameterTypes
(int num, Class<?>... ptypesToInsert) 追加のパラメータの型を持つメソッド型を検索または作成します。insertParameterTypes
(int num, List<Class<?>> ptypesToInsert) 追加のパラメータの型を持つメソッド型を検索または作成します。Class
<?> このメソッド型の最後のパラメータ型を返します。static MethodType
methodType
(Class<?> rtype) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodType
methodType
(Class<?> rtype, Class<?> ptype0) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodType
methodType
(Class<?> rtype, Class<?>[] ptypes) 指定されたメソッド型のインスタンスを検索または作成します。static MethodType
methodType
(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodType
methodType
(Class<?> rtype, MethodType ptypes) 指定されたコンポーネントを持つメソッド型を検索または作成します。static MethodType
methodType
(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
- 指定された型を見つけられない場合SecurityException
- セキュリティ・マネージャが存在し、loader
がnull
で、コール元にRuntimePermission
("getClassLoader")
が含まれていない場合- 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
- 関連項目:
-