1
A
回答
4
是的,這取決於是什麼意思。
考慮諸如ObjectWeb ASM等項目(請參見the ASM 2.0 tutorial瞭解一般情況)。
試圖發出需要反編譯的Java源代碼是另一回事:如果這是目標,那麼可能應該編輯源代碼,重新編譯並以某種方式加載/結束。 (這也是可能的,考慮工具如JRebel。)
快樂編碼。
2
你不應該能夠修改現有的類。但是如果你實現一個類加載器,那麼你可以動態加載來自非傳統來源的類:網絡,XML文件,用戶輸入,隨機數生成器等。
可能還有其他更好的方法。
0
0
我寫一旦使用反射的應用,讓測試通過的文本文件來驅動。舉例來說,如果你有這樣一個類:
class Tuner(String Channel) {
tune(){...
play(){...
stop(){...
}
你可以通過如下代碼的執行方法:
tuner=Channel 1
tune tuner
play tuner
stop tuner
它有一些更多的功能(你可以將對象傳遞到其他物品等),但大多數情況下我用它來驅動測試電纜盒,其中完整的寫入/構建/部署爲了測試花費了大約半小時的時間。
您可以創建一些可重用的類並將它們與此測試語言連接在一起,以便創建一些非常複雜且易於創建測試的測試。
這是一個DSL,不會用鬆散語法語言來繞開,通過消除括號並在隨機位置添加下劃線和點使其看起來像一些奇怪的半英語。
相關問題
- 1. 用戶可以修改PHP會話嗎?
- 2. 可以通過元類修改默認的repr行爲嗎?
- 3. 循環可以每次通過用戶輸入通過
- 4. 是否可以通過用戶腳本檢測頁面修改?
- 5. 通過語音輸入來自用戶
- 6. 我可以修改RoR CRUD行爲嗎?
- 7. 我可以修改通過SOAP請求
- 8. 我可以更改用戶的鍵盤輸入嗎?
- 9. 用戶可以更改選擇框的輸入變量嗎?
- 10. Laravel:通過可選的用戶輸入進行口頭過濾
- 11. R knitr:可以通過編程修改塊標籤嗎?
- 12. 可以通過線程修改pthread_create參數嗎?
- 13. 我可以修改通過鍵集的地圖嗎
- 14. 您可以通過編程修改DotNetNuke Breadcrumb皮膚對象嗎?
- 15. getline()可以跳過不帶用戶輸入嗎?
- 16. 可以修改jQuery庫嗎?
- 17. 可以修改rt.jar嗎?
- 18. 可以修改TWTweetComposeViewController嗎?
- 19. 客戶端/用戶可以修改會話嗎?
- 20. 用戶可以通過我的網站上的HTML輸入驗證Google API嗎?
- 21. 可以修改自己的輸入的Python函數
- 22. 通過AsyncTask自動獲取以前輸入的用戶名,pwd
- 23. 我可以對REPL中早先輸入的代碼進行修改嗎?
- 24. Azure DocumentDB - 可以通過自定義索引改進插入請求費用嗎?
- 25. 如何修改shiny中的sliderInput以便用戶可以直接輸入值?
- 26. 修改用戶輸入提交
- 27. 我可以通過單獨修改配置來修復DB2 Query Timeout嗎?
- 28. 我可以使用JavaScript(用戶腳本)修改chrome:// extensions/page嗎?
- 29. 通過用戶輸入以執行最後的剪切命令
- 30. 通過GUI向用戶輸入參數添加用戶輸入java
所以最糟糕的是它可以重新編譯並運行一個新的會話。有什麼更好的?我認爲它可以改爲在會話結束時重新編譯一次,直到那時才修改活動進程。 – user474632
「最壞的情況下」:)如果JRebel仍然有試用版,我建議玩這個。它沒有給出代碼/ API,哦,那真是太棒了,但是你可以看到新的[編譯後]類正在被「加載」。現在,想象一下,如果不是程序員更新類源代碼......(還有一些工具可以處理Java源代碼/ AST)。 – 2011-12-01 20:54:07
@ user474632然而,如果這純粹是一種學術冒險,我認爲玩[LISP](http://en.wikipedia.org/wiki/Lisp_%28programming_language%29)實現會帶來更多的直接收益。 LISP在這方面具有諸多優勢,如內置評估和代碼即公正數據。 LISP可以說是引入了元編程的全部概念 - 早在50年代! – 2011-12-01 20:56:25