問題陳述:
Java 反射可用於檢索變數名稱的變數?給定以下程式碼片段:
Foo b = new Foo(); Foo a = new Foo(); Foo r = new Foo();
我們能否發展出精確定位變數名稱的方法,例如:
public void baz(Foo... foos) { for (Foo foo : foos) { // Print the name of each foo - b, a, and r System.out.println(***); // Placeholder for variable name access } }
解:
解:在Java 8 之前,透過反射檢索局部變數名稱是不可能的。但是,該版本中引入了部分支援。參數名稱是一種特殊類型的局部變量,可以透過反射來存取。事實證明,這對於替換依賴注入框架常用的 @ParameterName 等註釋非常有用。
要獲得更全面的局部變數名稱信息,檢查類別文件可能會提供一些見解。在編譯過程中,最佳化技術有時會消除這些資料以節省空間。但是,如果存在,方法的局部變數表屬性會列出其各自指令範圍內的變數類型和名稱。 字節碼工程工具(例如 ASM)可以提供在運行時檢查此資訊的機制。鑑於此功能主要在開發環境中的利基應用,此類程式庫提供的補充功能不僅僅是提取變數名稱。以上是Java反射可以檢索本機宣告的變數名稱嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!