如何在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();