模块  jdk.jdi
软件包  com.sun.jdi

Interface InterfaceType

    • 方法详细信息

      • 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,
                                   List<? extends Value> arguments,
                                   int options)
                            throws InvalidTypeException,
                                   ClassNotLoadedException,
                                   IncompatibleThreadStateException,
                                   InvocationException
        在目标VM中调用指定的静态方法 必须在此接口中定义指定的方法。 该方法必须是静态方法,但不是静态初始化程序。

        方法调用将在指定的线程中进行。 仅当指定的线程已被该线程中发生的事件挂起时,才会发生方法调用。 当目标VM已通过悬浮不支持方法调用VirtualMachine.suspend()或当指定的线程通过挂起ThreadReference.suspend()

        使用指定参数列表中的参数调用指定的方法。 方法调用是同步的; 在调用的方法在目标VM中返回之前,此方法不会返回。 如果被调用的方法抛出异常,则此方法将抛出一个InvocationException ,其中包含抛出异常对象的镜像。

        对象参数必须与参数类型兼容(这意味着必须通过封闭类'类加载器加载参数类型)。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 如果被调用的方法接受可变数量的参数,则最后一个参数类型是某个组件类型的数组。 匹配位置中的参数可以省略,或者可以为null,相同组件类型的数组,或组件类型的参数,后跟任意数量的相同类型的其他参数。 如果省略该参数,则传递组件类型的0长度数组。 组件类型可以是基本类型。 不支持自动装箱。 有关分配兼容性的更多信息,请参见The Java™ Language Specification的第5.2节。

        默认情况下,如果先前由事件或VirtualMachine.suspend()ThreadReference.suspend()暂停,则在调用方法时,将恢复目标VM中的所有线程。 这样做是为了防止在任何线程拥有被调用方法所需的监视器时将发生的死锁。 但请注意,此隐式恢复的行为与ThreadReference.resume()完全相同,因此如果线程的挂起计数大于1,则在调用期间它将保持挂起状态,因此仍可能发生死锁。 默认情况下,调用完成后,目标VM中的所有线程都将被挂起,无论它们在调用之前的状态如何。 调用期间可能会发生断点或其他事件。 这可能导致如上所述的死锁。 如果从客户端的事件处理程序线程调用invokeMethod,它也可能导致死锁。 在这种情况下,此线程将等待invokeMethod完成,并且不会读取新事件的EventSet。 如果这个新的EventSet是SUSPEND_ALL,那么就会发生死锁,因为没有人会恢复EventSet。 为避免这种情况,应在执行invokeMethod之前禁用所有EventRequests,或者不应从客户端的事件处理程序线程执行invokeMethod。

        通过在options参数中指定ClassType.INVOKE_SINGLE_THREADED位标志,可以防止在调用期间恢复其他线程。 但是,没有针对上述死锁的保护或恢复,因此应谨慎使用此选项。 只恢复指定的线程(如上面所有线程所述)。 完成单线程调用后,将再次暂停调用线程。 请注意,在调用完成时,不会挂起在单线程调用期间启动的任何线程。

        如果在调用期间断开目标VM(例如,通过VirtualMachine.dispose() ),则方法调用将继续。

        参数
        thread - 要调用的线程。
        method - 要调用的方法
        arguments - 绑定到调用方法的Value参数列表。 列表中的值按它们在方法签名中出现的顺序分配给参数。
        options - 整数位标志选项。
        结果
        一个Value镜像的被调用方法的返回值。
        异常
        IllegalArgumentException - 如果方法不是此接口的成员,如果参数列表的大小与方法的已声明参数的数量不匹配,或者方法不是静态的,或者是静态初始值设定项。
        ClassNotLoadedException - 如果尚未通过适当的类加载器加载任何参数类型。
        IncompatibleThreadStateException - 如果指定的线程尚未被事件挂起。
        InvocationException - 如果方法调用导致目标VM中出现异常。
        InvalidTypeException - 如果参数不符合此要求 - 对象参数必须与参数类型兼容。 这意味着必须通过封闭类的类加载器加载参数类型。 原始参数必须是与参数类型兼容的赋值,或者必须可转换为参数类型而不会丢失信息。 有关分配兼容性的更多信息,请参阅JLS第5.2节。
        VMCannotBeModifiedException - 如果VirtualMachine是只读的 - 请参阅 VirtualMachine.canBeModified()
        从以下版本开始:
        1.8