Как проверить, наследуется ли classstype от java.util.Коллекция в JDI?

#java #debugging #jvmti #jdi

#java #отладка #jvmti #jdi

Вопрос:

Я могу получить все интерфейсы ClassType с allInterfaces() помощью, но это приводит ко многим вызовам JDWP для debuggee, которые выполняются медленно. Другим подходом было бы проверить это:

 Collection.class.isAssignableFrom(classType)
  

но метод isAssignableFrom() находится в java.lang.Class , и поэтому я должен вызвать этот метод с invokeMethod таким образом:

 javaLangClassReference.invokeMethod(threadRef, isAssignableFromMethod,
                        Arrays.asList(myClassType),
                        ObjectReference.INVOKE_SINGLE_THREADED);
  

Но здесь есть две проблемы:

  1. classType не может использоваться в качестве параметра для вызова метода, это не Value
  2. Как мне предоставить java.util.Collection в качестве параметра Методу (Arrays.asList(myClassType, ...)) ?

Кроме того, есть ли более простой способ проверить, является ли данное ClassType java.util.Collection ?

Комментарии:

1. IsAssignableFrom находится в java.lang. Класс. Этого нет в java.lang. Объект.

2. @rzwitserloot, ты прав, это была моя ошибка. Обновлено.

3. Вы можете использовать classObject() для преобразования ReferenceType в соответствующий ObjectReference / Value .

4. @Holger, спасибо, так что тогда у меня будет javaUtilCollectionRef.classObject() , и тогда я просто вызову javaUtilCollectionRef.classObject().invokeMethod(...,Arrays.asList(myClassRef.classObject()),...) , это правильно?

5. Кажется, это единственный способ