Java方法如何检索与该特定方法相关的方法对象? (JAVA)

时间:2010-12-06 13:03:16

标签: java methods

我正在编写一个带有以下签名的Java方法。

void Logger(Method method,Object [] args);

如果方法(例如ABC())调用此方法Logger,它应该检索封装自身数据的Method对象(ABC())并将其作为参数传递。

方法如何检索存储有关该方法的所有信息的Method对象?

一种简单的方法是我使用 Method [] methods = ExampleClass.Class.getMethods(); 并使用正确的名称在整个数组中搜索Method。 (这是非常低效的)。此外,如果两个或多个方法具有相同的名称,那么我将不得不检索它们的参数类型(以区分它们)并为每个方法使用不同的代码。这既低效又痛苦。

有更好的方法吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

不要这样做。而是从堆栈中获取方法名称。

public void log(Object object) {
    String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
    // ...
}

然而,这是相当昂贵的,这就是为什么大多数自我尊重的日志框架提供了打开/关闭它的选项(我建议使用它而不是自己生长的)。

答案 1 :(得分:1)

更好的是,根本不要实现此方法。使用logback或其他一些现代日志框架。

答案 2 :(得分:0)

如果您正在编写现有记录器框架的包装器,那么已经提供了一种在日志消息中打印方法名称的方法 - 如果这是您要实现的内容。

你可以从log4j文档中读取,例如,这个提取(如另一个答案所示)是从堆栈跟踪完成的,并且价格昂贵:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html