2017-07-29 53 views
3

java.lang.reflect玩,想知道是否有任何可能獲得的java.lang.reflect.Field反思:如何在沒有評估的情況下獲得一個領域的價值?

public class Dummy { 
    String envHttpPort = System.getenv("HTTP_PORT"); 
} 

從Java反射轉讓價值我想有System.getenv("HTTP_PORT");返回的null,而不是因爲它的價值似乎通過類的實例化,據我所知,需要檢索Field的值將是System.getenv(String)調用的值,這不是我想要的。

是否可以按原樣讀取字段和值?

有用的輸出將與源代碼相同。

我希望你們明白,如果不是,請讓我知道,我會嘗試重新說明這個問題。

+3

所以你試圖找回一段代碼'System.getenv(「HTTP_PORT」)'並自己評估它,或者類似的東西?爲什麼?我懷疑有一個更簡單/更好的方法來解決你正在處理的任何問題... –

+6

我同意馬特。這看起來像另一個[X/Y問題]的案例(https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Pshemo

+0

我問的原因是我希望我的源代碼是能夠生成與我在System.getenv中使用的端點的文檔,通過使用前綴/可以使用註釋我會推測,以及其他的原因,以便能夠查看字段x的「真正」價值將減少重複。 想象一下,您會編寫許多環境變量,並且需要將它們複製到JavaDoc中,而我的願景是將此並行運行到構建或測試並獲取環境變量或路由端點的報告。 –

回答

0

不,不可能獲得某個字段的「賦值」(因爲您已經爲此問題的目的而任意定義它),因爲正如您已經看到的那樣,它不是一個值,它是一段代碼。

此代碼是實例初始化的一部分,不能在沒有字節碼操作的情況下提取。即使可以提取它,它也只知道如何設置特定類的特定字段的值,但不會返回任何可以使用的值。它也很可能會調用類的其他代碼來完成它的工作,所以即使你設法隔離它,也不可能在實例的正常初始化之外執行它。

長話短說,別想到它。

相關問題