如何通过反射找出方法的字符串名称?
例如给出:
class Car{
public void getFoo(){
}
}
Run Code Online (Sandbox Code Playgroud)
我想得到字符串"getFoo",如下所示:
Car.getFoo.toString() == "getFoo" // TRUE
Run Code Online (Sandbox Code Playgroud)
Mal*_*olm 36
您可以像这样获取String:
Car.class.getDeclaredMethods()[0].getName();
Run Code Online (Sandbox Code Playgroud)
这适用于您班级中单个方法的情况.如果要遍历所有声明的方法,则必须遍历返回的数组Car.class.getDeclaredMethods()
:
for (Method method : Car.class.getDeclaredMethods()) {
String name = method.getName();
}
Run Code Online (Sandbox Code Playgroud)
您应该使用,getDeclaredMethods()
如果要查看所有这些,getMethods()
将仅返回公共方法.
最后,如果要查看此时正在执行的方法的名称,则应使用以下代码:
Thread.currentThread().getStackTrace()[1].getMethodName();
Run Code Online (Sandbox Code Playgroud)
这将获得当前线程的堆栈跟踪,并在其顶部返回方法的名称.
Mat*_*att 20
由于方法本身不是对象,因此它们没有直接属性(就像您期望在JavaScript等语言中使用第一类函数).
你最接近的就是打电话 Car.class.getMethods()
Car.class
是一个Class
可用于调用任何反射方法的对象.
但是,据我所知,一种方法无法识别自己.
Jes*_*per 14
那么,您想获取当前正在执行的方法的名称吗?这是一个有点难看的方式:
Exception e = new Exception();
e.fillInStackTrace();
String methodName = e.getStackTrace()[0].getMethodName();
Run Code Online (Sandbox Code Playgroud)
看看这个线程:
它提供了更多的解决方案 - 例如:
String name = new Object(){}.getClass().getEnclosingMethod().getName();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
57912 次 |
最近记录: |