Java 方法如何检索属于该特定方法的方法对象? (爪哇)

发布于 2024-10-05 22:17:26 字数 404 浏览 1 评论 0原文

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

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

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

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

一个简单的方法是我使用 Method[] 方法 = ExampleClass.Class.getMethods(); 并在整个数组中搜索具有正确名称的方法。 (这是相当低效的)。另外,如果两个或多个方法具有相同的名称,那么我也必须检索它们的参数类型(以区分它们),并且每个方法都有不同的代码。这不仅效率低下而且痛苦。

有更好的办法吗?

感谢您的帮助。

I am writing a Java method with the following signature.

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

If a method (e.g. ABC() ) calls this method Logger, it should retrieve the Method object that encapsulates data about itself (ABC()) and pass it as an argument.

How can a method retrieve the Method object that is storing all the information about that method?

A simple way is that I use
Method[] methods = ExampleClass.Class.getMethods();
and search the whole array for the Method with the correct name. (Which is quite inefficient). Also, if two or more methods have the same names, then I will have to retrieve their parameter types too (to distinguish them) and have different code for each method. This would be inefficient as well as painful.

Is there a better way?

Thanks for the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

故事↓在人 2024-10-12 22:17:26

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

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

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

Don't do it. Rather obtain the method name from the stack.

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

This is however pretty expensive and that's why most self-respected logging frameworks offer an option to turn it on/off (which I would recommend to use instead of homegrowing one).

初懵 2024-10-12 22:17:26

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

Even better, don't implement this method at all. Use logback, or some other modern logging framework.

水染的天色ゝ 2024-10-12 22:17:26

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

例如,您可以从 log4j 文档中了解到,这种提取(如其他答案所示)是从堆栈跟踪中完成的,并且成本高昂: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

If you are writing a wrapper over existing logger frameworks then the already provide a way to print the method name in the log message - if that's what you are trying to implement.

You can read from the log4j documentation, for example, that this extraction (as the other answer suggests) is done from the stack trace and is expensive : http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文