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