Java中如何获取变量名称?

3

可能是重复问题:
Java反射:如何获取变量的名称?

我在这个话题上找到了各种讨论,但从未得到令人满意的答案。

A anyVariableName = new A();

我怎样才能获得变量anyVariableName的名称并且得到字符串"anyVariableName"作为结果?这在Java中是否可行?


"但从来没有任何令人满意的答案..." 这往往是因为根本不存在答案。你看到了哪些答案,它们又以何种方式不能满足你?" - Andrew Thompson
2
anyVariableName 在代码中是一个字段还是一个普通变量? - gaborsch
2个回答

7
如果anyVariableName是一个局部变量,你就不能这样做。如果它是一个字段,请使用Class#getField()Class#getDeclaredField()

11
注意:这两种方法仅在您已经知道名称的情况下才有用。 - Peter Lawrey

7

本地变量名字存储的唯一地方是源代码(您可以解析)或者调试信息(如果已经包含在字节码中,您可以从中获取)

如果是字段,您可以使用Class.getDeclaredFields()方法,即使您不知道名称也可以。


如果你使用Java“反编译器”对一个类进行反编译,你会发现所有的变量名称都已经改变了。例如,如果你在源代码中有Socket s = new Socket(9001);,你可能会看到类似Socket localSocket = new Socket(9001);的内容。虽然这让我感到困惑,因为我不明白如果发生这种情况,反射是如何工作的。 - ldam
据我所知,反编译器不使用调试信息。我不确定为什么这样。 - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接