2009-02-19 115 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等