Mik*_*ike 8 java reflection macros compile-time
如何在编译时获取封闭方法名称?
为什么我很难弄清楚这一点?为什么Java不希望我这样做?我没有看到像这样的功能存在任何固有问题,它对于记录方法名称而不重复方法签名和字符串常量非常有用,如下所示:
private void methodName() {
final String MN = "methodName";
...
Run Code Online (Sandbox Code Playgroud)
有人可能会更改方法名称而不更改MN常量,然后我无法在日志中找到它.
我知道Java有一种(反射?)方法可以做到这一点,但是为什么有人想要过度复杂化并且使用运行时解决方案(针对这个特定问题)创建错误的可能性超出了我.
显然宏是不好的做法,但我认为这对他们来说是一个非常好的用例.这就是我基本上要做的事情,比如宏,常数.
顺便说一下,这个问题很相似:
但是,没有一个解决方案是在编译时派生的常量.它们都是运行时计算.
编辑:为什么不能在编译时完成?
请不要给出一个简单的答案,比如"这就是Java的设计方式",因为那时我只会问"为什么?"
小智 0
不是在编译时,但仍然可能适合你:
public class test1 {
public void display() {
try {
final String s = this.getClass().getMethod("display",null).toString();
System.out.println(s);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
test1 obj = new test1();
obj.display();
}
}
Run Code Online (Sandbox Code Playgroud)