-
- All Superinterfaces:
-
Accessible
,Comparable<ReferenceType>
,Mirror
,ReferenceType
,Type
public interface InterfaceType extends ReferenceType
目标虚拟机中的接口的镜像。 InterfaceType是一个ReferenceType
的改进,适用于定义中JLS意义上的真实接口(不是类而不是数组类型)。 接口类型永远不会由ObjectReference.referenceType()
返回,但它可能在该方法返回的ClassType
的已实现接口列表中。- 从以下版本开始:
- 1.3
- 另请参见:
-
ObjectReference
-
-
方法摘要
所有方法 接口方法 抽象方法 Default Methods Modifier and Type 方法 描述 List<ClassType>
implementors()
获取直接实现此接口的当前准备的类。default Value
invokeMethod(ThreadReference thread, 方法 method, List<? extends Value> arguments, int options)
调用目标VM中指定的静态方法
。List<InterfaceType>
subinterfaces()
获取当前准备的接口,直接扩展该接口。List<InterfaceType>
superinterfaces()
获取此接口直接扩展的接口。-
Methods inherited from interface com.sun.jdi.Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
-
Methods inherited from interface java.lang.Comparable
compareTo
-
Methods inherited from interface com.sun.jdi.Mirror
toString, virtualMachine
-
Methods inherited from interface 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
-
-
-
-
方法详细信息
-
superinterfaces
List<InterfaceType> superinterfaces()
获取此接口直接扩展的接口。 返回的列表只包含该接口声明为扩展的那些接口。- 结果
-
一个
InterfaceType
对象的列表, 每个对象镜像由此接口扩展的接口。 如果不存在,返回零长度列表。 - 异常
-
ClassNotPreparedException
- 如果这个课程尚未准备好
-
subinterfaces
List<InterfaceType> subinterfaces()
获取当前准备的接口,直接扩展该接口。 返回的列表仅包含在其“extends”子句中声明此接口的接口。- 结果
-
一个
InterfaceType
对象的列表, 每个对象镜像一个扩展此接口的接口。 如果不存在,返回零长度列表。
-
implementors
List<ClassType> implementors()
获取直接实现此接口的当前准备的类。 返回的列表仅包含在其“implements”子句中声明此接口的类。- 结果
-
一个
ClassType
对象的列表,每个镜像一个实现此接口的类。 如果不存在,返回零长度列表。
-
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
-
-