一千萬個為什麽

搜索

在運行時更改java類

這是我的問題。假設有兩個類,

Class A --> in package PA
Class B --> in package PB

在編譯時,我定義了A類和B類。

現在,無論我在編譯時在B類中定義了什麽,我都希望在運行時將其更改為與A類相同。我的意思是在運行時加載B類時,我想刪除所有已定義的屬性,方法。然後將A類中定義的所有內容添加到B類中。

所以B類就像A類的虛擬副本。在運行時,B類與A類相同,只是它們在不同的包中。

這可能嗎?如何?

最佳答案

我認為你不能修改加載的類。你可以代理它,從而改變行為,但是它不會修改加載的類,你應該讓abitiy將你的實現註入正確的位置。

這是設置器有時/通常比在代碼中調用 new 更好的原因之一;它將提供註入模擬對象(或代理)的能力,而不是運行時實現。

我非常高興它不可能(或者不應該沒有對JVM進行修改),因為這將是一個巨大的安全漏洞。

您可以通過使用特制的類加載器來實現類似的效果,該類加載器可識別所請求的類並返回不同的類。雖然這是一個等待發生的事故。

轉載註明原文: 在運行時更改java類