【发布时间】:2015-04-17 14:27:53
【问题描述】:
如何在编译时获得封闭的方法名称?
为什么我很难弄清楚这一点?为什么 Java 不希望我这样做?我没有看到像这样的特性有任何固有的问题,它对于记录方法名称很有用,而不会在方法签名和字符串常量之间重复,如下所示:
private void methodName() {
final String MN = "methodName";
...
可能有人在不更改MN常量的情况下更改方法名称,然后我在日志中找不到。
我知道 Java 有一个(反思的?)方法可以做到这一点,但是为什么有人想要过度复杂化事情并使用运行时解决方案(针对这个特定问题)来制造错误的可能性,这超出了我的理解。
显然宏是不好的做法,但我认为这对它们来说是一个很好的用例。这就是我的基本目标,类似于宏、常量。
顺便说一句,这个问题很相似:
Getting the name of the current executing method
不过,没有一个解决方案是在编译时派生的常量。它们都是运行时计算。
编辑:为什么不能在编译时完成?
请不要给出“Java 就是这样设计的”之类的琐碎回答,因为那样我只会问“为什么?”
【问题讨论】:
-
什么方法名?请更清楚地解释您要完成的工作。 (答案可能是你需要使用 Java 8 方法句柄。)
-
如果你使用日志框架,那么捕获方法名已经被处理了。
-
我不认为这是一个骗局,我正在寻找一个编译时解决方案,但该解决方案中没有提到
-
不能在编译时完成。
标签: java reflection macros compile-time