2014-06-15 1 views
0

Je suis en train de tester la méthode de réflexion dans Java. Je veux utiliser la méthode de réflexion au lieu de la méthode switch pour invoquer des méthodes. Supposons, je la classe ci-dessous:Utilisation de la méthode de réflexion à la place du commutateur

public class Sample { 
public void add(int a, int b) { 
    System.out.println("a + b = " + (a + b)); 
} 

public void subtract(int a, int b) { 
    System.out.println("a - b = " + (a - b)); 
} 

public void multiply(int a, int b) { 
    System.out.println("a * b = " + (a * b)); 
} 

public void divide(int a, int b) { 
    System.out.println("a/b = " + (a/b)); 
} 

puis, dans la principale méthode, l'utilisateur entre un nom de méthode pour appeler une méthode. Mais, je ne sais pas comment définir les paramètres a et b dans la méthode principale après avoir appelé une méthode. Le code pour la méthode principale est ici:

public class Test { 
public static void main(String[] args) { 
    try { 
     Scanner scr = new Scanner(System.in); 
     String str = scr.next(); 
     Object obj = Class.forName("packageName.Sample").newInstance(); 
     Method method = obj.getClass().getDeclaredMethod(str); 
     method.invoke(obj); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

+0

http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html#invoke%28java.lang.Object,%20java.lang.Object...% 29 –

Répondre

0

Je l'ai montré les mécanismes de collaboration avec les méthodes paramétrées par la réflexion. Cela fonctionnera pour toutes vos méthodes, car elles prennent toutes (int, int) comme paramètres. Vous devez modifier les paramètres (str, int.class, int.class) de getDeclaredMethod en conséquence si vous travaillez avec différents types de paramètres.

public static void main(String[] args) { 
try { 
    Scanner scr = new Scanner(System.in); 
    String str = scr.next(); 
    int a = scr.nextInt(); 
    int b = scr.nextInt(); 
    Object obj = Class.forName("PackageName.Sample").newInstance(); 
    Method method = obj.getClass().getDeclaredMethod(str,int.class,int.class); 
    method.invoke(obj,a,b); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 
} 

(Dans cet exemple, notez que j'ai modifié la lecture à partir du scanner pour accepter le nom de la méthode, le premier et le second int paramètres int de l'utilisateur à travers System.in, séparés en appuyant sur Entrée.

Questions connexes