モジュール jdk.jdi
パッケージ com.sun.jdi

インタフェースClassType

  • すべてのスーパー・インタフェース:
    Accessible, Comparable<ReferenceType>, Mirror, ReferenceType, Type


    public interface ClassType
    extends ReferenceType
    ターゲットVM内のクラスのミラーです。 ClassTypeは、JLSで定義されている意味での真のクラス(インタフェースでも、配列型でもない)に適用されるReferenceTypeの改良版です。 この種のクラスのインスタンスをミラー化するすべてのObjectReferenceの型は、ClassTypeです。
    導入されたバージョン:
    1.3
    関連項目:
    ObjectReference
    • フィールドの詳細

      • 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内の指定されたstatic 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初期化子のいずれかである場合。
        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()を参照)。