2013-01-22 96 views
3

可能重複:
Java Reflection: How to get the name of a variable?如何在Java中獲取變量名?

我發現這個話題,但從來沒有任何令人滿意的答案各種各樣的議論..

A anyVariableName = new A(); 

我怎樣才能得到的名稱變量anyVariableName並得到字符串"anyVariableName"作爲結果? 這在Java中可能嗎?

+0

*「但從來沒有任何令人滿意的答案..」*這往往是因爲沒有答案。你看到了什麼答案,以什麼方式不滿足你? –

+2

在代碼中'anyVariableName'是一個字段還是一個公共變量? – gaborsch

回答

7

如果anyVariableName是局部變量,則不能。如果它是一個字段,請使用Class#getField()Class#getDeclaredField()

+9

注意:這兩種方法只有在你已經有了名字時纔有用。 –

7

唯一的地方局部變量名都存儲在源(你可以解析)或調試信息(你可以從字節碼得到,如果已被列入它)

如果它是一個領域,你如果您不知道名稱,可以使用Class.getDeclaredFields()。

+0

+1,如果你得到一個Java「反編譯器」並在類上使用它,你會看到你的所有變量都有改變的名字。例如,如果你有'Socket s = new Socket(9001);'你可能會看到類似'Socket localSocket = new Socket(9001);'的東西。雖然這讓我感到困惑,因爲我不明白如果這種事情發生,反射是如何工作的。 – Logan

+0

AFAIK,反編譯器不使用調試信息。我不確定這是爲什麼。 –