因此對於這個項目,我試圖在運行時擴展一個類。 我想知道的是,這甚至有可能嗎?如果是這樣,我該怎麼做?這些東西有圖書館嗎?在運行時擴展類
Q
在運行時擴展類
5
A
回答
4
CGLib是你要找的圖書館。在擴展類或在運行時實現接口方面是相當強大的,所以許多流行的框架(如Spring或Hibernate)都使用它。
您可以創建類擴展的代碼一樣
public Object createProxy(Class targetClass) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(NoOp.INSTANCE);
return enhancer.create();
}
雖然你可能會與期望的邏輯的有效方法攔截器更換NoOp
回調。
+0
太棒了,謝謝! – PaulBGD
1
0
答案取決於「擴展課程」的含義。在java中,「擴展」意味着聲明另一個擴展第一個類的類(是一個子類)。所以如果你想創建一個給定類的子類,這是可能的 - 只需準備一個表示子類的字節數組並將其傳遞給類加載器即可。
如果要將字段或方法添加到現有類中,則只有在加載此類時纔有可能,並且可以通過替換字節數組表示來完成。如果class已經加載,你不能以任何方式修改它。
+0
我只是想動態地選擇擴展哪個類(因爲類的類路徑不斷變化)。 – PaulBGD
相關問題
- 1. 在運行時動態擴展類型?
- 2. 在運行時擴展/修改NHibernate類
- 3. Java:在運行時擴展類
- 4. 從擴展運行方法擴展運行擴展運行
- 5. 在運行時擴展對象時如何調用類方法?
- 6. 在運行時擴展NHibernate查詢
- 7. TD在運行時得到擴展
- 8. JavaScript在運行時擴展對象?
- 9. 在運行時加載OpenGL擴展
- 10. 在運行時在XSD中擴展複雜類型
- 11. 在運行時擴展Log4JLogger並調用子類
- 12. 無法擴展在運行時編譯的類
- 13. 如何使用Reflection在運行時使用PHP擴展類
- 14. 擴展類時出現錯誤擴展
- 15. 運行vscode-mssql擴展時出錯
- 16. Fortran運行時警告:擴展名:$ descriptor
- 17. 通過在構造函數中接受基類型在運行時擴展類?
- 18. PHP類擴展 - 運行父函數之前運行的東西
- 19. Php從不同的類運行時延伸(擴展爲變量?)
- 20. 擴展groovy類導致運行時異常當檢索bean
- 21. Android ADT:擴展android.widget.EditText - 運行時類拋出異常
- 22. 當我運行「php TestRunner SiteTest.php」時,它看不到擴展類
- 23. 對window.open運行Firefox擴展()
- 24. 運行擴展自動
- 25. 無法運行Firefox擴展
- 26. 如何測試一個java類是否在運行時擴展另一個類?
- 27. 安裝「Memcache」PECL擴展後無法運行PHP運行時
- 28. Visual Studio代碼運行時保存擴展未運行
- 29. 擴展擴展類型
- 30. 擴展擴展類Zend_Db_Table_Row_Abstract
你爲什麼要這麼做?請澄清用例。我懷疑這是否可能。 –