Идентификация типа класса для аргументов, необходимых в gerDeclaredMethod в java

Я использую Java Reflection для вызова метода xyz с этими четырьмя типами параметров:

Set<LineItems> 
String
Document
Profiler

При использовании getDeclaredMethod мне необходимо указать тип аргумента метода. Если тип аргумента String — String.class, что нужно сделать для Set<LineItems>? Должен ли это быть Set.class? (Помня, что Set — это интерфейс)

Функция xyz является функцией по умолчанию в интерфейсе abc. Этот интерфейс реализуется во многих других классах, поэтому метод следует отразить только здесь. Вот мой код:

Class c = abc.getClass();

Class args[] = new Class[4];
args[0] = Set.class;
args[1] = String.class;
args[2] = Document.class;
args[3] = Profiler.class;

Method m = c.getMethod("xyz",args) ;

Я получаю исключение NoSuchMethodFoundException Я знаю, что в этом может быть несколько недостатков. Любая помощь?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

what should be done for Set<LineItems>?

Что у вас там Set.class должно делать. Помните, что дженерики Java поставляются с стирание типа, поэтому в время выполнения сигнатура этого метода тоже будет Set.class!

И да, когда подпись метода, который вы собираетесь вызывать, говорит Set, тогда использование класса Set (интерфейса) — это именно то, что вам нужно сделать. Если, например, в сигнатуре метода указано HashSet, то Set.class подойдет нет!

Ответ принят как подходящий

Я смог решить это:

Object[] args= new Object[4];
args[0]= setOfItems;
args[1]= aString;
args[2]= document;
args[3]= profiler;

Method m = this.getClass().getMethod("xyz", Set.class, String.class, Document.class, Profiler.class);
Object result = proxy.invoke(m, this, args)

Другие вопросы по теме