【问题标题】:How to get variable name in Java? [duplicate]如何在 Java 中获取变量名? [复制]
【发布时间】:2013-01-22 13:27:02
【问题描述】:

可能重复:
Java Reflection: How to get the name of a variable?

我发现了关于这个主题的各种讨论,但从来没有任何令人满意的答案..

A anyVariableName = new A();

如何获取变量anyVariableName 的名称并得到字符串"anyVariableName" 作为结果? 这在 Java 中可行吗?

【问题讨论】:

  • “但从来没有任何令人满意的答案..” 这通常是因为没有答案。你看到了哪些答案,它们在哪些方面不让你满意?
  • anyVariableName是代码中的字段还是公共变量?

标签: java reflection


【解决方案1】:

如果anyVariableName 是局部变量,则不能。如果是字段,请使用Class#getField()Class#getDeclaredField()

【讨论】:

  • 注意:这两种方法只有在你已经有了名字的情况下才有用。
【解决方案2】:

存储局部变量名称的唯一位置是源代码(您可以解析)或调试信息(如果已包含,您可以从字节码中获取)

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

【讨论】:

  • +1,如果你得到一个Java“反编译器”并在一个类上使用它,你会看到你所有的变量都改变了名字。例如,如果您的源中有Socket s = new Socket(9001);,您可能会看到类似Socket localSocket = new Socket(9001); 的内容。虽然这让我感到困惑,因为我不明白如果发生这种事情,反射是如何工作的。
  • AFAIK,反编译器不使用调试信息。我不确定这是为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2011-02-03
  • 2015-08-17
  • 2015-07-08
相关资源
最近更新 更多