-
- すべてのスーパー・インタフェース:
Accessible
,Comparable<ReferenceType>
,Mirror
,ReferenceType
,Type
public interface ClassType extends ReferenceType
ターゲットVM内のクラスのミラーです。 ClassTypeは、JLSで定義されている意味での真のクラス(インタフェースでも、配列型でもない)に適用されるReferenceType
の改良版です。 この種のクラスのインスタンスをミラー化するすべてのObjectReference
の型は、ClassTypeです。- 導入されたバージョン:
- 1.3
- 関連項目:
ObjectReference
-
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static int
INVOKE_SINGLE_THREADED
呼出し側のスレッドだけを再開してメソッドの呼出しを実行します。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 抽象メソッド 修飾子と型 メソッド 説明 List<InterfaceType>
allInterfaces()
このクラスにより直接的または間接的に実装されたインタフェースを取得します。Method
concreteMethodByName(String name, String signature)
指定された名前およびシグニチャを持つこのクラスから認識可能な、単一の非abstractMethod
を返します。List<InterfaceType>
interfaces()
このクラスにより直接実装されたインタフェースを取得します。Value
invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
ターゲットVM内の指定されたstaticMethod
を呼び出します。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()
このクラスのスーパー・クラスを取得します。-
インタフェース com.sun.jdi.Accessibleで宣言されたメソッド
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
-
インタフェース java.lang.Comparableで宣言されたメソッド
compareTo
-
インタフェース com.sun.jdi.Mirrorで宣言されたメソッド
toString, virtualMachine
-
インタフェース com.sun.jdi.ReferenceTypeで宣言されたメソッド
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, module, name, nestedTypes, sourceDebugExtension, sourceName, sourceNames, sourcePaths, visibleFields, visibleMethods
-
-
-
-
フィールドの詳細
-
INVOKE_SINGLE_THREADED
static final int INVOKE_SINGLE_THREADED
呼出し側のスレッドだけを再開してメソッドの呼出しを実行します。- 関連項目:
- 定数フィールド値
-
-
メソッドの詳細
-
superclass
ClassType superclass()
このクラスのスーパー・クラスを取得します。- 戻り値:
- ターゲットVM内のこのクラスのスーパー・クラスをミラー化する
ClassType
。 このようなクラスが存在しない場合はnullを返す
-
interfaces
List<InterfaceType> interfaces()
このクラスにより直接実装されたインタフェースを取得します。 このクラスのimplementsキーワードを使って宣言されたインタフェースだけが含まれます。- 戻り値:
- ターゲットVM内のこのClassTypeの直接のインタフェースをミラー化する
InterfaceType
オブジェクトのリスト。 このようなオブジェクトが存在しない場合、長さゼロのリストを返す。 - 例外:
ClassNotPreparedException
- このクラスがまだ準備されていない場合。
-
allInterfaces
List<InterfaceType> allInterfaces()
このクラスにより直接的または間接的に実装されたインタフェースを取得します。interfaces()
によって返されるインタフェースは、すべてのスーパー・インタフェースと同様に返されます。- 戻り値:
- ターゲットVM内のこのClassTypeのインタフェースをミラー化する
InterfaceType
オブジェクトのリスト。 このようなオブジェクトが存在しない場合、長さゼロのリストを返す。 - 例外:
ClassNotPreparedException
- このクラスがまだ準備されていない場合。
-
subclasses
List<ClassType> subclasses()
現在ロードされている、このクラスの直接のサブクラスを取得します。 このリストの順序は保証されません。- 戻り値:
- ターゲットVM内のこのクラスのロードされたサブクラスをミラー化する
ClassType
オブジェクトのリスト。 このようなクラスが存在しない場合、このメソッドは長さゼロのリストを返す。
-
isEnum
boolean isEnum()
このクラスがenumとして宣言されたかどうかを判定します。- 戻り値:
- このクラスがenumとして宣言されている場合は
true
、そうでない場合はfalse。
-
setValue
void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
値をstaticフィールドに代入します。Field
は、このClassTypeに対して有効である必要があります。つまり、ミラー化されたオブジェクトのクラスのフィールドであるか、そのクラスのスーパー・クラスのフィールドである必要があります。 フィールドはfinalであってはいけません。オブジェクトの値は、このフィールドの型への代入互換性を持たなければなりません(これは、このフィールド型は、囲むクラスのクラス・ローダーによってロードする必要があることを意味する)。 プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。 代入互換性の詳細は、JLSのセクション5.2を参照してください。
- パラメータ:
field
- 設定するフィールド。value
- 代入される値。- 例外:
IllegalArgumentException
- フィールドがstaticではない場合、フィールドがfinalである場合、またはフィールドがこのクラス内に存在しない場合。ClassNotLoadedException
- フィールドの型が、適切なクラス・ローダーによってロードされていない場合。InvalidTypeException
- 値の型が宣言されたフィールド型と一致しない場合。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
invokeMethod
Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
ターゲットVM内の指定されたstaticMethod
を呼び出します。 指定するメソッドは、このクラス内またはスーパー・クラス内で定義できます。 このメソッドには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初期化子のいずれかである場合。ClassNotLoadedException
- 引数型が、適切なクラス・ローダーによってロードされていない場合。IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合。InvocationException
- メソッドの呼出しにより、ターゲットVMで例外が発生した場合。InvalidTypeException
- 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません。 (これは、囲むクラスのクラス・ローダーによってこの引数型をロードする必要があることを意味する)。 プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。 代入互換性の詳細は、JLSのセクション5.2を参照してください。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
newInstance
ObjectReference newInstance(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
ターゲットVM内の指定されたコンストラクタの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
- メソッドがこのクラスのメンバーでない場合、引数リストのサイズがコンストラクタに対して宣言された引数の数に一致しない場合、またはメソッドがコンストラクタでない場合。ClassNotLoadedException
- 引数型が、適切なクラス・ローダーによってロードされていない場合。IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合。InvocationException
- メソッドの呼出しにより、ターゲットVMで例外が発生した場合。InvalidTypeException
- 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません。 (これは、囲むクラスのクラス・ローダーによってこの引数型をロードする必要があることを意味する)。 プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。 代入互換性の詳細は、JLSのセクション5.2を参照してください。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
concreteMethodByName
Method concreteMethodByName(String name, String signature)
指定された名前およびシグニチャを持つこのクラスから認識可能な、単一の非abstractMethod
を返します。 シグニチャ形式の詳細は、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)
-
-