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

インタフェースInterfaceType

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

public interface InterfaceType
extends ReferenceType
ターゲットVM内のインタフェースのミラーです。 InterfaceTypeは、JLSで定義されている意味での真のインタフェース(クラスでも、配列型でもない)に適用されるReferenceTypeの改良版です。 ObjectReference.referenceType()によってインタフェース型が返されることは決してありませんが、そのメソッドによって返されるClassTypeの実装済みインタフェースのリストに含まれることはあります。
導入されたバージョン:
1.3
関連項目:
ObjectReference
  • メソッドの詳細

    • superinterfaces

      List<InterfaceType> superinterfaces()
      このインタフェースにより直接拡張されたインタフェースを取得します。 返されるリストには、このインタフェースが拡張を宣言したインタフェースだけが含まれます。
      戻り値:
      このインタフェースにより拡張されたインタフェースをミラー化する、InterfaceTypeオブジェクトのList。 このようなオブジェクトが存在しない場合、長さゼロのリストを返す。
      例外:
      ClassNotPreparedException - このクラスがまだ準備されていない場合。
    • subinterfaces

      List<InterfaceType> subinterfaces()
      このインタフェースを直接拡張する、現在準備のできたインタフェースを取得します。 返されるリストには、そのextends節でこのインタフェースを宣言したインタフェースだけが含まれます。
      戻り値:
      このインタフェースを拡張するインタフェースをミラー化する、InterfaceTypeオブジェクトのList。 このようなオブジェクトが存在しない場合、長さゼロのリストを返す。
    • implementors

      List<ClassType> implementors()
      このインタフェースを直接実装する、現在準備のできたクラスを取得します。 返されるリストには、そのimplements節でこのインタフェースを宣言したクラスだけが含まれます。
      戻り値:
      このインタフェースを実装するクラスをミラー化する、ClassTypeオブジェクトのList。 このようなオブジェクトが存在しない場合、長さゼロのリストを返す。
    • invokeMethod

      default Value invokeMethod​(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
      ターゲットVM内の指定されたstatic Methodを呼び出します。 指定するメソッドは、このインタフェース内で定義する必要があります。 このメソッドにはstaticメソッドを指定できますが、static初期化子を指定することはできません。

      メソッド呼出しは、指定されたスレッドで実行されます。 指定されたスレッドがそのスレッド内で発生したイベントにより中断される場合にのみ、メソッドの呼出しを行います。 ターゲット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引数にClassType.INVOKE_SINGLE_THREADEDビット・フラグを指定することによって防止できます。ただし、上記のデッドロックに対する防御やリカバリはありませんので、このオプションは非常に注意して使用する必要があります。 指定されたスレッドのみが再開されます(前述したすべてのスレッドの場合と同様)。 シングル・スレッド呼出しが完了すると、呼出し元スレッドは再び中断されます。 シングル・スレッド呼出し中に開始されたすべてのスレッドは、呼出し完了時にも中断されません。

      呼出し中にVirtualMachine.dispose()などによってターゲットVMが切断された場合でも、メソッドの呼出しは続行されます。

      パラメータ:
      thread - 呼出しを行うスレッド。
      method - 呼び出すMethod
      arguments - 呼び出されたメソッドにバインドされたValue引数のリスト。 リストから取得した値は、メソッド・シグニチャに指定されている順序で引数に代入される。
      options - 整数ビット・フラグ・オプション。
      戻り値:
      呼び出されたメソッドの戻り値のValueミラー。
      例外:
      IllegalArgumentException - メソッドがこのインタフェースのメンバーでない場合、引数リストのサイズがメソッドに対して宣言された引数の数に一致しない場合、またはメソッドがstaticでない、またはstatic初期化子である場合。
      ClassNotLoadedException - 引数型が、適切なクラス・ローダーによってロードされていない場合。
      IncompatibleThreadStateException - 指定されたスレッドが、イベントによって中断されていない場合。
      InvocationException - メソッドの呼出しにより、ターゲットVMで例外が発生した場合。
      InvalidTypeException - 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません。 (これは、囲むクラスのクラス・ローダーによってこの引数型をロードする必要があることを意味する)。 プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。 代入互換性の詳細は、JLSのセクション5.2を参照してください。
      VMCannotBeModifiedException - VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()を参照)。
      導入されたバージョン:
      1.8