簡體   English   中英

如何在運行時通過反射擴展 class

[英]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 在編譯時不存在。

我的問題是:

  1. 如何編寫 Class B 的代碼,因為某些方法會覆蓋 Class A 中的方法?
  2. 如何在運行時指定 Class B 擴展到 Class A ?

你不能用反思。 但是你可以用CGLIB或者javassist

您可以創建一個 A 的虛擬副本,其中包含您想要覆蓋的所有方法,並且只編譯和部署 B。

如果在運行時之前不知道要覆蓋哪些方法,則需要使用編譯器 API 生成代碼,但是像 Objectweb 的 ASM 這樣的庫可能要簡單得多。 我更喜歡 ASM,因為它可以輕松生成代碼以從模板中生成您想要的內容。 即您不必自己編寫所有代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM