如何在java中获取方法的字符串名称?

如何通过reflection找出方法的字符串名称?

例如给出:

class Car{ public void getFoo(){ } } 

我想得到字符串“getFoo”,如下所示:

  Car.getFoo.toString() == "getFoo" // TRUE 

由于方法本身不是对象,因此它们没有直接属性(就像您期望在JavaScript等语言中使用第一类函数)。

你最接近的是调用Car.class.getMethods()

Car.class是一个Class对象,可用于调用任何reflection方法。

但是,据我所知,一种方法无法识别自己。

您可以像这样获取String:

 Car.class.getDeclaredMethods()[0].getName(); 

这适用于您class级中单个方法的情况。 如果要遍历所有声明的方法,则必须遍历Car.class.getDeclaredMethods()返回的数组:

 for (Method method : Car.class.getDeclaredMethods()) { String name = method.getName(); } 

如果要查看所有这些,则应使用getDeclaredMethods()getMethods()将仅返回公共方法。

最后,如果要查看此时正在执行的方法的名称,则应使用以下代码:

 Thread.currentThread().getStackTrace()[1].getMethodName(); 

这将获得当前线程的堆栈跟踪,并在其顶部返回方法的名称。

那么,您想获取当前正在执行的方法的名称吗? 这是一个有点难看的方式:

 Exception e = new Exception(); e.fillInStackTrace(); String methodName = e.getStackTrace()[0].getMethodName(); 

尝试这个,

  import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); } catch (Throwable e) { System.err.println(e); } } } 

等等,因为你已经知道了方法名,你不能只是把它键入字符串吗?

而不是(伪) Class.methodName.toString() ,只需使用"methodName ”。

否则,您可以使用Class#getDeclaredMethods()来获取类中的所有方法

看看这个post:

获取当前正在执行的方法的名称

它提供了更多解决方案 – 例如:

 String name = new Object(){}.getClass().getEnclosingMethod().getName();