2010-12-06 69 views
0

我正在使用以下签名编写Java方法。Java方法如何检索与特定方法有关的方法对象? (Java)

void Logger(Method method,Object [] args);如果某个方法(例如ABC())调用此方法Logger,它应该检索封装有关其自身(ABC())的数据的Method对象并将其作为参数传递。

一个方法如何检索存储有关该方法的所有信息的Method对象?一个简单的方法是,我使用 Method [] methods = ExampleClass.Class.getMethods(); 并用正确的名称在整个数组中搜索Method。 (这是非常低效的)。另外,如果两个或多个方法具有相同的名称,那么我也必须检索它们的参数类型(以区分它们),并为每种方法使用不同的代码。这将是无效的,也是痛苦的。

有没有更好的方法?

感谢您的帮助。

+1

什么是所有这些代码巫术的目的是什么?如果你能说出目的,那么也许有人可以提出一个更好的方法来完成它,而不是所有这些复杂的逻辑。 – 2010-12-06 13:07:16

回答

5

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

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

但是,这是相当昂贵的,这就是为什么大多数的自我尊重的日志框架提供了一个选项,将其打开/关闭(这我会建议,而不是使用homegrowing一个)。

+0

+1。我同意1)这是做到这一点的方法;和2)应该避免*一般*(尽管伐木者是一个很好的例外)。 – 2010-12-06 13:07:11

1

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