Как вызвать метод в Java, используя отражение - PullRequest
9 голосов
/ 09 марта 2010

Как я могу вызвать метод с параметрами, используя отражение?

Я хочу указать значения этих параметров.

Ответы [ 4 ]

15 голосов
/ 09 марта 2010

Вот простой пример вызова метода с использованием отражения с использованием примитивов.

import java.lang.reflect.*;

public class ReflectionExample {
    public int test(int i) {
        return i + 1;
    }
    public static void main(String args[]) throws Exception {
        Method testMethod = ReflectionExample.class.getMethod("test", int.class);
        int result = (Integer) testMethod.invoke(new ReflectionExample(), 100);
        System.out.println(result); // 101
    }
}

Чтобы быть устойчивым, вы должны перехватить и обработать все проверенные исключения, связанные с отражением NoSuchMethodException, IllegalAccessException, InvocationTargetException.

3 голосов
/ 10 декабря 2012

Вызвать метод класса с помощью отражения очень просто. Вам нужно создать класс и сгенерировать в нем метод. вроде как.

package reflectionpackage;

public class My {
    public My() {
    }

    public void myReflectionMethod() {
        System.out.println("My Reflection Method called");
    }
}

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

package reflectionpackage; 
import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 

public class ReflectionClass {

    public static void main(String[] args) 
    throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        Class c=Class.forName("reflectionpackage.My");
        Method m=c.getDeclaredMethod("myReflectionMethod");
        Object t = c.newInstance();
        Object o= m.invoke(t);       
    } 
}

Подробнее см. Здесь .

0 голосов
/ 09 марта 2010

это самый простой способ, который я знаю, он должен быть окружен try & catch:

Метод m = .class.getDeclaredMethod ("", arg_1.class, arg_2.class, ...arg_n.class);result = () m.invoke (null, (Object) arg_1, (Object) arg_2 ... (Object) arg_n);

это для вызова статического метода, если вы хотите вызвать нестатическийметод, вам нужно заменить первый аргумент m.invoke () из null на объект, из которого вызывается базовый метод.

не забудьте добавить импорт в java.lang.reflect. *;

0 голосов
/ 09 марта 2010

Вы можете использовать getClass в любом объекте, чтобы обнаружить его класс. Затем вы можете использовать getMethods , чтобы обнаружить все доступные методы. Если у вас есть правильный метод, вы можете вызвать invoke с любым количеством параметров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...