是否可以通过类的反射来调用方法?
class MyObject {
... //some methods
public void fce() {
//call another method of this object via reflection?
}
}
谢谢。
答案 0 :(得分:7)
绝对:
import java.lang.reflect.*;
public class Test
{
public static void main(String args[]) throws Exception
{
Test test = new Test();
Method method = Test.class.getMethod("sayHello");
method.invoke(test);
}
public void sayHello()
{
System.out.println("Hello!");
}
}
如果您遇到问题,请发布一个特定问题(最好使用简短但完整的程序来证明问题),我们会尝试对其进行排序。
答案 1 :(得分:3)
你可以..但是可能有更好的方法来做你想做的事情(?)。要通过反射调用方法,您可以执行类似的操作 -
class Test {
public void foo() {
// do something...
}
public void bar() {
Method method = getClass.getMethod("foo");
method.invoke(this);
}
}
如果要调用的方法有参数,那么它稍有不同 - 除了要调用它的对象外,还需要将参数传递给invoke方法,当你从Class中获取方法时,需要指定一个参数类型列表。即String.class等。
答案 2 :(得分:3)
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Main
{
public static void main(final String[] argv)
{
final Main main;
main = new Main();
main.foo();
}
public void foo()
{
final Class clazz;
final Method method;
clazz = Main.class;
try
{
method = clazz.getDeclaredMethod("bar", String.class);
method.invoke(this, "foo");
}
catch(final NoSuchMethodException ex)
{
// handle it however you want
ex.printStackTrace();
}
catch(final IllegalAccessException ex)
{
// handle it however you want
ex.printStackTrace();
}
catch(final InvocationTargetException ex)
{
// handle it however you want
ex.printStackTrace();
}
}
private void bar(final String msg)
{
System.out.println("hello from: " + msg);
}
}