[英]how to extend a class at runtime with reflection
想象一下,我有兩個 Class A 和 B,B 擴展 A,比如
class B extends A
{
....
}
但是,在我的情況下,Class A 已加密,只能由我的 ClassLoader 在運行時加載(在編譯時,A.class 無法識別為 a.class 文件,因為它已加密) 這意味着 Class A 在編譯時不存在。
我的問題是:
您可以創建一個 A 的虛擬副本,其中包含您想要覆蓋的所有方法,並且只編譯和部署 B。
如果在運行時之前不知道要覆蓋哪些方法,則需要使用編譯器 API 生成代碼,但是像 Objectweb 的 ASM 這樣的庫可能要簡單得多。 我更喜歡 ASM,因為它可以輕松生成代碼以從模板中生成您想要的內容。 即您不必自己編寫所有代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.