2016-05-05 8 views
1

Ich möchte den Namen einer bestimmten Methode mit dem Parameter aus einer Klasse zurückgeben.Wie gebe ich den Namen einer bestimmten Methode mit dem Parameter aus einer Klasse zurück

Ich habe ein Programm, das auch den Methodennamen zurückgibt, aber den Klassennamen und den Paketnamen enthält. Der Code ist:

import java.lang.reflect.*; 

public class ClassDemo { 
    public static void main(String[] args) { 
    ClassDemo cls = new ClassDemo(); 
    Class c = cls.getClass(); 

    try {     
     // parameter type is null 
     Method m = c.getMethod("show", null); 
     System.out.println("method = " + m.toString());   
    } 
    catch(NoSuchMethodException e) { 
     System.out.println(e.toString()); 
    } 
    try { 
     // method Long 
     Class[] cArg = new Class[1]; 
     cArg[0] = Long.class; 
     Method lMethod = c.getMethod("showLong", cArg); 
     System.out.println("method = " + lMethod.toString()); 
    } 
    catch(NoSuchMethodException e) { 
     System.out.println(e.toString()); 
    } 
    } 

    public Integer show() { 
     return 1; 
    } 

    public void showLong(Long l) { 
     this.l = l; 
    } 
    long l = 78655; 
} 

Und das Ergebnis ist:

method = public java.lang.Integer ClassDemo.show() 
method = public void ClassDemo.showLong(java.lang.Long) 

Meine Frage ist es eine Möglichkeit, wo ich den Namen die Methode mit dem zugehörigen Parameter bekommen konnte, aber ohne die Klassennamen und Paketnamen?

meine ich in diesem Fall das Ergebnis sein wird:

method = show() 
method = showLong(Long) 

Ich sah die Frage Getting the name of the current executing method aber es ist nicht, was ich will. Kann mir jemand eine Lösung geben?

+0

Sie könnten 'lMethod.getName()' und 'lMethod.getParameterTypes()' aufrufen und von dort gehen? – immibis

+0

Verwenden Sie keine Codeformatierung für Text, der kein Code ist. – EJP

Antwort

1
System.out.print(m.getName() + "("); 
Class<?>[] params = m.getParameterTypes(); 
for (int i = 0; i < params.length; i++) { 
    if (i > 0) { 
     System.out.print(", "); 
    } 
    System.out.print(params[i].getSimpleName()); 
} 
System.out.println(")"); 
+0

10 Danke für die Antwort. Aber ich möchte die Methoden nicht drucken. Was ist, wenn ich jede Methode mit ihren Parametern innerhalb einer Methode zurückgeben muss? damit ich jede Methode an einem anderen Ort anwenden konnte. – Nitu08

+0

@ Nitu08 in Ihrer Frage, die Sie druckten. Sie können die gleiche Logik sehr einfach anpassen, um eine Zeichenfolge zu verketten und zurückzugeben. – shmosel

+0

Ja, das habe ich getan. Danke. – Nitu08

1

Um die Methodennamen zu erhalten:

Class<?>[] paramTypes = method.getParameterTypes(); 
for(Class<?> paramType : paramTypes) { 
    System.out.println(paramType.getSimpleName()); 
} 
0

ich versucht habe, ein Verfahren zu schreiben, die jede Methode mit seinem Parameter zurück:

System.out.println(method.getName()); 

die Methodenparameter Typnamen zu erhalten :

public String getparameter(Method method){ 

     String m = method.getName();   
     String str = "";   
      Class<?>[] params = method.getParameterTypes(); 
      for (int i = 0; i < params.length; i++) { 
       if (i > 0) { 
        //System.out.print(", "); 
       }   
       str += m+"(" +params[i].getSimpleName()+ ")"; 
       System.out.println(str); 
      } 
      return str; 
    } 

Aber Das Problem hier ist, dass es die Methoden mit nur einem Patienten zurückgibt. Wie kann ich auch die Methoden anzeigen, die mehr als einen Parameter haben?

Verwandte Themen