gpt4 book ai didi

java - 获取表示异常来源的 Method 对象

转载 作者:行者123 更新时间:2023-11-29 03:18:07 25 4
gpt4 key购买 nike

在 Java 中是否有可能获得一个 Method 对象,该对象表示抛出异常的方法,只提供上述异常?

举个例子:

public class Test {

protected void toFail() throws Exception {
throw new Exception();
}

protected void toFail(String someparameter) throws Exception {
throw new Exception();
}

public static void main(String[] args) {
try {
new Test().toFail("");
}catch(Exception ex){
//Clever code here
}
}

}

什么聪明的代码能让我得到一个代表 toFail(String) 方法的 Method 对象?假设它甚至可能:)

澄清:我需要唯一地标识导致异常的方法,并且我需要能够从中创建一个反射方法对象。当我说唯一时,我的意思是我需要考虑重载方法的可能性。

最佳答案

你可以像这样得到类名和方法名:

StackTraceElement ste = exception.getStackTrace()[0];

String className = ste.getClassName();
String methodName = ste.getMethodName();

但是您无法获取Method 对象,因为StackTraceElement 没有记录哪些 方法具有相同的名称。

您可以获得可能 方法 对象(可能匹配 名称一样),如下所示:

StackTraceElement ste = exception.getStackTrace()[0];

Class<?> c = Class.forName(ste.getClassName());
String mname = ste.getMethodName();

// NOTE:
// Exceptions thrown in constructors have a method name of "<init>"
// Exceptions thrown in static initialization blocks have a method name of
// "<cinit>"

if ("<init>".equals(mname)) {
// Constructors are the possible "methods", all of these:
c.getConstructors();
} else if ("<cinit>".equals(mname)) {
System.out.println("Thrown in a static initialization block!");
} else {
// Thrown from a method:
for (Method m : c.getMethods()) {
if (m.getName().equals(mname)) {
System.out.println("Possible method: " + m);
}
}
}

关于java - 获取表示异常来源的 Method 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com