-
- All Superinterfaces:
-
Accessible
,Comparable<ReferenceType>
,Mirror
,ReferenceType
,Type
public interface InterfaceTypeextends ReferenceType
目标VM中接口的镜像。 InterfaceType是ReferenceType
的细化,适用于定义的JLS意义上的真实接口(不是类,不是数组类型)。ObjectReference.referenceType()
永远不会返回接口类型,但它可能位于该方法返回的ClassType
的已实现接口列表中。- 从以下版本开始:
- 1.3
- 另请参见:
-
ObjectReference
-
-
方法摘要
所有方法 实例方法 抽象方法 Default Methods 变量和类型 方法 描述 List<ClassType>
implementors()
获取当前准备的直接实现此接口的类。default Value
invokeMethod(ThreadReference thread, 方法 method, List<? extends Value> arguments, int options)
在目标VM中调用指定的静态方法
。List<InterfaceType>
subinterfaces()
获取当前准备好的直接扩展此接口的接口。List<InterfaceType>
superinterfaces()
获取此接口直接扩展的接口。-
声明方法的接口 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, 字段, 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
-
-
-
-
方法详细信息
-
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
-
-