2009-02-19 118 views
4

是否可以通过类的反射来调用方法?使用反射调用方法

class MyObject { 
    ... //some methods 

    public void fce() { 
     //call another method of this object via reflection? 
    } 
} 

谢谢。

回答

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); 
    } 
} 
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!"); 
    } 
} 

如果你有问题,后一个具体的问题(最好是有短,但完整的程序,证明了问题),我们会尝试把它整理出来。

+0

不要创建空的Object数组。利用可变参数签名:调用(测试) – erickson 2009-02-19 17:59:39

3

你可以......但是可能有更好的方法来做你以后的事情(?)。要通过反射调用一个方法,你可以这样做 -

class Test { 

    public void foo() { 
     // do something... 
    } 

    public void bar() { 
     Method method = getClass.getMethod("foo"); 
     method.invoke(this); 
    } 
} 

如果你想调用的方法的参数那么它略有不同 - 你需要在除了参数传递给invoke方法的对象调用它当你从类中获得方法时,你需要指定一个参数类型的列表。即String.class等