Определение типа класса для аргументов, необходимых в gerDeclaredMethod в Java - PullRequest
0 голосов
/ 28 мая 2019

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

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. Я знаю, что в этом может быть несколько недостатков.Любая помощь?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Я смог решить эту проблему:

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)
0 голосов
/ 28 мая 2019

что нужно сделать для Set<LineItems>?

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

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

...