2011-12-01 25 views

回答

4

是的,這取決於是什麼意思。

考慮諸如ObjectWeb ASM等項目(請參見the ASM 2.0 tutorial瞭解一般情況)。

試圖發出需要反編譯的Java源代碼是另一回事:如果這是目標,那麼可能應該編輯源代碼,重新編譯並以某種方式加載/結束。 (這也是可能的,考慮工具如JRebel。)

快樂編碼。

+0

所以最糟糕的是它可以重新編譯並運行一個新的會話。有什麼更好的?我認爲它可以改爲在會話結束時重新編譯一次,直到那時才修改活動進程。 – user474632

+0

「最壞的情況下」:)如果JRebel仍然有試用版,我建議玩這個。它沒有給出代碼/ API,哦,那真是太棒了,但是你可以看到新的[編譯後]類正在被「加載」。現在,想象一下,如果不是程序員更新類源代碼......(還有一些工具可以處理Java源代碼/ AST)。 – 2011-12-01 20:54:07

+1

@ user474632然而,如果這純粹是一種學術冒險,我認爲玩[LISP](http://en.wikipedia.org/wiki/Lisp_%28programming_language%29)實現會帶來更多的直接收益。 LISP在這方面具有諸多優勢,如內置評估和代碼即公正數據。 LISP可以說是引入了元編程的全部概念 - 早在50年代! – 2011-12-01 20:56:25

2

你不應該能夠修改現有的類。但是如果你實現一個類加載器,那麼你可以動態加載來自非傳統來源的類:網絡,XML文件,用戶輸入,隨機數生成器等。

可能還有其他更好的方法。

0

我寫一旦使用反射的應用,讓測試通過的文本文件來驅動。舉例來說,如果你有這樣一個類:

class Tuner(String Channel) { 

    tune(){... 
    play(){... 
    stop(){... 
} 

你可以通過如下代碼的執行方法:

tuner=Channel 1 
tune tuner 
play tuner 
stop tuner 

它有一些更多的功能(你可以將對象傳遞到其他物品等),但大多數情況下我用它來驅動測試電纜盒,其中完整的寫入/構建/部署爲了測試花費了大約半小時的時間。

您可以創建一些可重用的類並將它們與此測試語言連接在一起,以便創建一些非常複雜且易於創建測試的測試。

這是一個DSL,不會用鬆散語法語言來繞開,通過消除括號並在隨機位置添加下劃線和點使其看起來像一些奇怪的半英語。

相關問題