2016-02-04 2 views
0

Я хочу создать один метод, который может использовать любой метод с любым количеством параметров и любого типа данных.Как вызвать любые методы с любым числом параметров и любым типом данных в Java

Для примера. Я хочу назвать следующие все методы динамически Void method1 (интермедиат х, Int у) аннулируются method2 (INT х, String у) аннулируются method3 (Float X, Long Y, String г)


Я используя отражение для этого. Теперь я заметил, как передать параметры этим методам во время вызова этого динамического метода. Насколько я ....

MyClass myClass = new MyClass(); 
    Class<?> c = myclass.getClass(); 
    Method[] m = c.getMethods(); 
    int i = 0; 
    Object [] obj; // obj contains values to be passed 
    for(Method method : m) 
    { 
     if("methodX".equals(method.getName())) 
     { 
      break; 
     } 
     i++; 
    } 
    Method myMethod = m[i]; 
    myMethod.invoke(myClass, obj); //this is not working 

Как я могу вызвать MyMethod?

Хотя применение метода, я получаю сообщение об ошибке «неверное количество параметров»

+1

Возможный дубликат [Как вызвать метод Java при указании имени метода в виде строки?] (Http://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method -when-given-the-method-name-as-a-string) – scana

+0

Проверьте имя метода, а также типы параметров. У Apache Commons Lang есть некоторые полезные классы, которые помогают в этом. Тем не менее, ИМО главный вопрос: _что вы пытаетесь достичь с этим? _ – Thomas

ответ

0

Попробуйте myMethod.invoke(subject, obj), subject быть экземпляром вы хотите вызывать метод.

+0

Передача 'obj' будет работать, только если метод взял только один параметр типа' Object [] '. – Thomas

+0

@Thomas - он работает, просто проверял его ... 'invoke' принимает два параметра - субъект и массив аргументов. Если вы хотите передать массив в качестве аргумента, вам нужно создать массив с одним элементом в нем - массив ... Например: MyClass.class.getMethod ("a", Object []. Class) .invoke (subject, new Object [] {obj}); ' – Grogi

+0

Спасибо .. Это сработало :) – Kartik