如何使用类中的参数返回特定方法的名称

时间:2016-05-05 04:45:58

标签: java reflection

我想使用类中的参数返回特定方法的名称。

我有一个程序也返回方法名称,但包括类名和包名。代码是:

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;
} 

结果是:

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

我的问题是,我有什么方法可以获得方法名称及其相关参数,但没有类名和包名?

我的意思是在那种情况下结果将是:

method = show()
method = showLong(Long)

我看到问题Getting the name of the current executing method,但这不是我想要的。任何人都可以给我任何解决方案吗?

3 个答案:

答案 0 :(得分: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(")");

答案 1 :(得分:1)

获取方法名称:

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

获取方法参数类型名称:

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

答案 2 :(得分:0)

我尝试编写一个方法,它将使用其参数返回每个方法:

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;
    }

但问题是,它只用一个pacameter返回方法。我怎样才能显示具有多个参数的方法??