- 所有超级接口:
-
Accessible
,Comparable<ReferenceType>
,Mirror
,ReferenceType
,Type
ReferenceType
。接口类型永远不会被ObjectReference.referenceType()
返回,但它可能在由该方法返回的ClassType
的实现接口列表中。
- 自版本:
- 1.3
- 参见:
-
Method Summary
Modifier and TypeMethodDescription获取当前准备好直接实现此接口的类。default Value
invokeMethod
(ThreadReference thread, Method method, List<? extends Value> arguments, int options) 在目标虚拟机中调用指定的静态Method
。获取当前准备好直接扩展此接口的接口。获取直接由此接口扩展的接口。Methods declared in interface com.sun.jdi.Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
Methods declared in interface java.lang.Comparable
compareTo
Methods declared in interface com.sun.jdi.Mirror
toString, virtualMachine
Methods declared in 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
-
Method Details
-
superinterfaces
List<InterfaceType> superinterfaces()获取直接由此接口扩展的接口。返回的列表仅包含此接口声明要扩展的接口。- 返回:
-
一个
InterfaceType
对象列表,每个对象镜像一个由此接口扩展的接口。如果不存在,则返回一个长度为零的列表。 - 抛出:
-
ClassNotPreparedException
- 如果此类尚未准备好。
-
subinterfaces
List<InterfaceType> subinterfaces()获取当前准备好直接扩展此接口的接口。返回的列表仅包含声明此接口在其“extends”子句中的接口。- 返回:
-
一个
InterfaceType
对象列表,每个对象镜像扩展此接口的接口。如果不存在,则返回一个长度为零的列表。
-
implementors
获取当前准备好直接实现此接口的类。返回的列表仅包含声明此接口在其“implements”子句中的类。- 返回:
-
一个
ClassType
对象列表,每个对象镜像实现此接口的类。如果不存在,则返回一个长度为零的列表。
-
invokeMethod
default Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException 在目标虚拟机中调用指定的静态Method
。指定的方法必须在此接口中定义。该方法必须是静态方法,但不能是静态初始化程序。方法调用将在指定的线程中发生。只有在指定线程已被在该线程中发生的事件暂停后,方法调用才能发生。当目标虚拟机通过
VirtualMachine.suspend()
或通过ThreadReference.suspend()
暂停时,不支持方法调用。指定的方法将使用指定参数列表中的参数进行调用。方法调用是同步的;此方法在目标虚拟机中调用的方法返回之前不会返回。如果调用的方法引发异常,则此方法将抛出一个包含引发的异常对象镜像的
InvocationException
。对象参数必须与参数类型兼容(这意味着参数类型必须通过封闭类的类加载器加载)。原始参数必须与参数类型兼容,或者必须可以在不丢失信息的情况下转换为参数类型。如果被调用的方法接受可变数量的参数,则最后一个参数类型是某种组件类型的数组。匹配位置的参数可以省略,或者可以是null,相同组件类型的数组,或者是组件类型的参数,后跟任意数量的同一类型的其他参数。如果参数被省略,则传递长度为0的组件类型数组。组件类型可以是原始类型。不支持自动装箱。有关赋值兼容性的更多信息,请参见《Java语言规范》第5.2节。
默认情况下,在调用方法时,如果之前由事件或
VirtualMachine.suspend()
或ThreadReference.suspend()
暂停的所有线程都会恢复。这样做是为了防止发生死锁,因为任何线程都拥有被调用方法所需的监视器。但是,请注意,这种隐式恢复的行为与ThreadReference.resume()
完全相同,因此如果线程的暂停计数大于1,则在调用期间它将保持暂停状态,因此仍然可能发生死锁。默认情况下,当调用完成时,目标虚拟机中的所有线程都会被暂停,无论它们在调用之前的状态如何。在调用期间可能会发生断点或其他事件。这可能会导致如上所述的死锁。如果从客户端的事件处理程序线程调用invokeMethod,还可能会导致死锁。在这种情况下,此线程将等待invokeMethod完成,并且不会读取新事件的EventSet。如果此新EventSet是SUSPEND_ALL,则将发生死锁,因为没有人会恢复EventSet。为了避免这种情况,在执行invokeMethod之前应禁用所有EventRequests,或者不应该从客户端的事件处理程序线程执行invokeMethod。在调用期间,可以通过在
options
参数中指定ClassType.INVOKE_SINGLE_THREADED
位标志来防止调用期间的其他线程恢复;但是,对于上述死锁没有保护或恢复,因此应谨慎使用此选项。只有指定的线程将被恢复(如上述所有线程所述)。在单线程调用完成后,调用线程将再次被暂停。请注意,在单线程调用完成时启动的任何线程在调用完成时不会被暂停。如果在调用期间断开目标虚拟机(例如,通过
VirtualMachine.dispose()
),方法调用将继续进行。- 参数:
-
thread
- 要调用的线程。 -
method
- 要调用的Method
。 -
arguments
- 绑定到调用方法的Value
参数列表。列表中的值按照它们在方法签名中出现的顺序分配给参数。 -
options
- 整数位标志选项。 - 返回:
-
调用方法的返回值的
Value
镜像。 - 抛出:
-
IllegalArgumentException
- 如果方法不是此接口的成员,如果参数列表的大小与方法的声明参数数量不匹配,或者如果方法不是静态的或是静态初始化程序。 -
ClassNotLoadedException
- 如果任何参数类型尚未通过适当的类加载器加载。 -
IncompatibleThreadStateException
- 如果指定的线程尚未被事件暂停。 -
InvocationException
- 如果方法调用导致目标虚拟机中的异常。 -
InvalidTypeException
- 如果参数不符合此要求 -- 对象参数必须与参数类型兼容。这意味着参数类型必须通过封闭类的类加载器加载。原始参数必须与参数类型兼容,或者必须可以在不丢失信息的情况下转换为参数类型。有关赋值兼容性的更多信息,请参见JLS第5.2节。 -
VMCannotBeModifiedException
- 如果VirtualMachine是只读的 - 请参见VirtualMachine.canBeModified()
。 - 自版本:
- 1.8
-