2009-02-19 7 views

Répondre

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

Absolument:

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

Si vous avez des problèmes, poser une question spécifique (avec un programme de préférence courte mais complète la démonstration du problème) et nous allons essayer de faire le tri.

+0

Ne créez pas le tableau Objet vide. Profitez de la signature de varargs: invoke (test) – erickson

+0

Va éditer dans une seconde - bien que bien sûr ça va faire la même chose. –

3

Vous pouvez .. Mais il y a probablement de meilleures façons de faire ce que vous cherchez (?). Pour appeler une méthode par réflexion que vous pourriez faire quelque chose comme -

class Test { 

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

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

Si la méthode que vous souhaitez appeler a des arguments, alors il est un peu différent - vous avez besoin pour passer des arguments à la méthode Invoke, en plus de l'objet de l'invoquer et lorsque vous obtenez la méthode de la classe, vous devez spécifier une liste de types d'arguments. c'est-à-dire String.class etc.

Questions connexes