public interface ClassType extends ReferenceType
ReferenceType
の改良版です。この種のクラスのインスタンスをミラー化するすべての ObjectReference
の型は、ClassType です。ObjectReference
修飾子と型 | フィールドと説明 |
---|---|
static int |
INVOKE_SINGLE_THREADED
呼び出し側のスレッドだけを再開してメソッドの呼び出しを実行します。
|
修飾子と型 | メソッドと説明 |
---|---|
List<InterfaceType> |
allInterfaces()
このクラスにより直接的または間接的に実装されたインタフェースを取得します。
|
Method |
concreteMethodByName(String name, String signature)
指定された名前およびシグニチャーを持つこのクラスから認識可能な、単一の非 abstract
Method を返します。 |
List<InterfaceType> |
interfaces()
このクラスにより直接実装されたインタフェースを取得します。
|
Value |
invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
ターゲット VM 内の指定された static
Method を呼び出します。 |
boolean |
isEnum()
このクラスが enum として宣言されたかどうかを判定します。
|
ObjectReference |
newInstance(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
ターゲット VM 内の指定されたコンストラクタの
Method を使って、この型の新規インスタンスを構築します。 |
void |
setValue(Field field, Value value)
値を static フィールドに代入します。
|
List<ClassType> |
subclasses()
現在ロードされている、このクラスの直接のサブクラスを取得します。
|
ClassType |
superclass()
このクラスのスーパークラスを取得します。
|
allFields, allLineLocations, allLineLocations, allMethods, availableStrata, classLoader, classObject, constantPool, constantPoolCount, defaultStratum, equals, failedToInitialize, fieldByName, fields, genericSignature, getValue, getValues, hashCode, instances, isAbstract, isFinal, isInitialized, isPrepared, isStatic, isVerified, locationsOfLine, locationsOfLine, majorVersion, methods, methodsByName, methodsByName, minorVersion, name, nestedTypes, sourceDebugExtension, sourceName, sourceNames, sourcePaths, visibleFields, visibleMethods
toString, virtualMachine
compareTo
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
static final int INVOKE_SINGLE_THREADED
ClassType superclass()
ClassType
。このようなクラスが存在しない場合は null を返すList<InterfaceType> interfaces()
InterfaceType
オブジェクトのリスト。このようなオブジェクトが存在しない場合、長さゼロのリストを返す。ClassNotPreparedException
- このクラスがまだ準備されていない場合。List<InterfaceType> allInterfaces()
interfaces()
によって返されるインタフェースは、すべてのスーパーインタフェースと同様に返されます。InterfaceType
オブジェクトのリスト。このようなオブジェクトが存在しない場合、長さゼロのリストを返す。ClassNotPreparedException
- このクラスがまだ準備されていない場合。List<ClassType> subclasses()
ClassType
オブジェクトのリスト。このようなクラスが存在しない場合、このメソッドは長さゼロのリストを返す。boolean isEnum()
true
、そうでない場合は false。void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
Field
は、この ClassType に対して有効である必要があります。つまり、ミラー化されたオブジェクトのクラスのフィールドであるか、そのクラスのスーパークラスのフィールドである必要があります。フィールドは final であってはいけません。
オブジェクトの値は、このフィールドの型への代入互換性を持たなければいけません (これは、このフィールド型は、囲むクラスのクラスローダーによってロードする必要があることを意味する)。プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。代入互換性の詳細は、「Java 言語仕様」のセクション 5.2 を参照してください。
field
- 設定するフィールド。value
- 代入される値。IllegalArgumentException
- フィールドが static ではない場合、フィールドが final である場合、またはフィールドがこのクラス内に存在しない場合。ClassNotLoadedException
- フィールドの型が、適切なクラスローダーによってロードされていない場合。InvalidTypeException
- 値の型が宣言されたフィールド型と一致しない場合。VMCannotBeModifiedException
- VirtualMachine が読み取り専用の場合 (VirtualMachine.canBeModified()
を参照)。Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Method
を呼び出します。指定するメソッドは、このクラス内またはスーパークラス内で定義できます。このメソッドには static メソッドを指定できますが、static 初期化子を指定することはできません。新規オブジェクトを作成し、そのコンストラクタを実行するには、newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List<? extends com.sun.jdi.Value>, int)
を使用します。
メソッド呼び出しは、指定されたスレッドで実行されます。指定されたスレッドがそのスレッド内で発生したイベントにより中断される場合にのみ、メソッドの呼び出しを行います。ターゲット VM が VirtualMachine.suspend()
によって中断された場合、または指定されたスレッドが ThreadReference.suspend()
によって中断された場合、メソッドの呼び出しはサポートされません。
指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッドの呼び出しは、同期をとられます。呼び出されたメソッドがターゲット VM で復帰するまで、このメソッドは復帰しません。呼び出されたメソッドが例外をスローする場合、このメソッドはスローされた例外オブジェクトに対するミラーを含む InvocationException
をスローします。
オブジェクト引数は、この引数型への代入互換性を持たなければいけません (これは、この引数型は、囲むクラスのクラスローダーによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。呼び出されているメソッドが引数の可変数を受け取る場合、最後の引数型が特定の要素型の配列になります。一致する位置にある引数は、省略される (つまり null となる) 可能性や、あるいは、同じ要素型の配列になる (つまり、同じ型のほかの引数の任意の数が続く要素型の引数となる) 可能性があります。引数が省略される場合は、配列の長さがゼロである要素型が渡されます。要素型はプリミティブ型である可能性もあります。自動ボックス化はサポートされていません。 代入互換性の詳細は、「Java™ 言語仕様」のセクション 5.2 を参照してください。
デフォルトでは、ターゲット VM 内のすべてのスレッドがメソッドの呼び出し中に再開されます (イベントや VirtualMachine.suspend()
または ThreadReference.suspend()
によって以前に中断されたスレッドの場合)。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ただし、この暗黙の再開は、ThreadReference.resume()
とまったく同様に行われるため、スレッドの中断カウントが 1 を超える場合は、呼び出し中にスレッドが再開されません。このため、デッドロックが発生する可能性があることに留意してください。デフォルトでは、ターゲット VM 内のすべてのスレッドは、呼び出しの完了時に中断します (呼び出し前のスレッドの状態とは無関係)。ブレークポイントまたはほかのイベントが、呼び出し中に発生する可能性があります。この場合、前述したデッドロックが発生することがあります。また、invokeMethod がクライアントのイベントハンドラスレッドから呼び出された場合も、デッドロックが発生することがあります。この場合、このスレッドは invokeMethod が完了するまで待機するので、新規イベントの発生に伴う EventSet の読み取りを行いません。この新規 EventSet が SUSPEND_ALL である場合、EventSet が再開されないので、デッドロックが発生します。この状況を避けるには、invokeMethod の実行前にすべての EventRequest を無効にするか、invokeMethod をクライアントのイベントハンドラスレッドから呼び出さないようにしてください。
options
引数に INVOKE_SINGLE_THREADED
ビットフラグを指定することにより、呼び出し中にほかのスレッドが再開しないようにできます。ただし、前述のようなデッドロックに対する保護や、デッドロックからの回復ができなくなるため、このオプションはよく注意して利用してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドの場合と同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドはふたたび中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。
呼び出し中に VirtualMachine.dispose()
などによってターゲット VM が切断された場合でも、メソッドの呼び出しは続行されます。
thread
- 呼び出しを行うスレッド。method
- 呼び出す Method
。arguments
- 呼び出されたメソッドにバインドされた Value
引数のリスト。リストから取得した値は、メソッドシグニチャーに指定されている順序で引数に代入される。options
- 整数ビットフラグオプション。Value
ミラー。IllegalArgumentException
- メソッドがこのクラスまたはスーパークラスのメンバーではない場合、引数リストのサイズがメソッドに対して宣言された引数の数に一致しない場合、またはメソッドが初期化子、コンストラクタ、static 初期化子のいずれかである場合。{@link
- InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合。ClassNotLoadedException
- 引数型が、適切なクラスローダーによってロードされていない場合。IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合。InvocationException
- メソッドの呼び出しにより、ターゲット VM で例外が発生した場合。InvalidTypeException
- 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません。(これは、囲むクラスのクラスローダーによってこの引数型をロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。代入互換性の詳細は、「Java 言語仕様」のセクション 5.2 を参照してください。VMCannotBeModifiedException
- VirtualMachine が読み取り専用の場合 (VirtualMachine.canBeModified()
を参照)。ObjectReference newInstance(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Method
を使って、この型の新規インスタンスを構築します。指定するコンストラクタは、このクラス内で定義する必要があります。
インスタンスの作成は、指定されたスレッドで実行されます。指定されたスレッドがそのスレッド内で発生したイベントによって中断された場合にだけ、インスタンスの生成は行われます。ターゲット VM が VirtualMachine.suspend()
によって中断された場合、または指定されたスレッドが ThreadReference.suspend()
によって中断された場合、インスタンスの生成はサポートされません。
指定されたコンストラクタは、指定された引数リスト内の引数を使って呼び出されます。呼び出しは同期をとられます。コンストラクタがターゲット VM 内で復帰するまで、このメソッドは復帰しません。呼び出されたメソッドが例外をスローする場合、このメソッドはスローされた例外オブジェクトに対するミラーを含む InvocationException
をスローします。
オブジェクト引数は、この引数型への代入互換性を持たなければいけません (これは、この引数型は、囲むクラスのクラスローダーによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。呼び出されているメソッドが引数の可変数を受け取る場合、最後の引数型が特定の要素型の配列になります。一致する位置にある引数は、省略される (つまり null となる) 可能性や、あるいは、同じ要素型の配列になる (つまり、同じ型のほかの引数の任意の数が続く要素型の引数となる) 可能性があります。引数が省略される場合は、配列の長さがゼロである要素型が渡されます。要素型はプリミティブ型である可能性もあります。自動ボックス化はサポートされていません。 代入互換性の詳細は、「Java™ 言語仕様」のセクション 5.2 を参照してください。
デフォルトでは、ターゲット VM 内のすべてのスレッドがメソッドの呼び出し中に再開されます (イベントや VirtualMachine.suspend()
または ThreadReference.suspend()
によって以前に中断されたスレッドの場合)。これは、いずれかのスレッドが、呼び出し先メソッドが必要とするモニターを所有している場合に、デッドロックが発生するのを防ぎます。ブレークポイントまたはほかのイベントが、呼び出し中に発生する可能性があります。ただし、この暗黙の再開は、ThreadReference.resume()
とまったく同様に行われるため、スレッドの中断カウントが 1 を超える場合は、呼び出し中にスレッドが再開されないことに留意してください。デフォルトでは、ターゲット VM 内のすべてのスレッドは、呼び出しの完了時に中断します (呼び出し前のスレッドの状態とは無関係)。
options
引数に INVOKE_SINGLE_THREADED
ビットフラグを指定することにより、呼び出し中にほかのスレッドが再開しないようにできます。ただし、前述のようなデッドロックに対する保護や、デッドロックからの回復ができなくなるため、このオプションはよく注意して利用してください。指定されたスレッドだけが再開されます (前述したすべてのスレッドの場合と同様)。シングルスレッド呼び出しが完了すると、呼び出し元スレッドはふたたび中断されます。シングルスレッド呼び出し中に開始されたすべてのスレッドは、呼び出し完了時にも中断されません。
呼び出し中に VirtualMachine.dispose()
などによってターゲット VM が切断された場合でも、メソッドの呼び出しは続行されます。
thread
- 呼び出しを行うスレッド。method
- 呼び出すコンストラクタ Method
。arguments
- 呼び出されたコンストラクタにバインドされた Value
引数のリスト。リストから取得した値は、コンストラクタシグニチャーに指定されている順序で引数に代入される。options
- 整数ビットフラグオプション。ObjectReference
ミラー。IllegalArgumentException
- メソッドがこのクラスのメンバーでない場合、引数リストのサイズがコンストラクタに対して宣言された引数の数に一致しない場合、またはメソッドがコンストラクタでない場合。{@link
- InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合。ClassNotLoadedException
- 引数型が、適切なクラスローダーによってロードされていない場合。IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合。InvocationException
- メソッドの呼び出しにより、ターゲット VM で例外が発生した場合。InvalidTypeException
- 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません。(これは、囲むクラスのクラスローダーによってこの引数型をロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。代入互換性の詳細は、「Java 言語仕様」のセクション 5.2 を参照してください。VMCannotBeModifiedException
- VirtualMachine が読み取り専用の場合 (VirtualMachine.canBeModified()
を参照)。Method concreteMethodByName(String name, String signature)
Method
を返します。シグニチャー形式の詳細は、ReferenceType.methodsByName(java.lang.String, java.lang.String)
を参照してください。
返されるメソッド (null 以外の場合) は、ClassType
のコンポーネントです。
name
- 検索対象のメソッドの名前。signature
- 検索対象のメソッドのシグニチャーMethod
。一致するものがない場合は null
。ClassNotPreparedException
- クラスが準備されていないために、メソッドがまだ利用可能ではない場合。ReferenceType.visibleMethods()
, ReferenceType.methodsByName(java.lang.String name)
, ReferenceType.methodsByName(java.lang.String name, java.lang.String signature)
Copyright © 1999, 2013, Oracle and/or its affiliates. All rights reserved.