2015-01-05 28 views
3

我想知道是否有辦法將動態更改代碼的代碼導入到主代碼中。事情是這樣的:如何在Java代碼中插入java文件

Main: 
int x; 
(insert input.java) 

input.java的內容:

x = 2; 

我可以導入內部input.java代碼主代碼?

+0

你是什麼意思的「動態變化的代碼」?即這裏的用例是什麼? –

+1

如果你的意思是像c的include指令,絕對不是。 Java的大部分設計都是圍繞不需要做這樣的事情而建立的。 – jjm

+0

你的意思是在編譯時還是在運行時?如果你想在編譯時包含另一個源文件,那麼正如jjm所說,答案是明確的「否」 - java語言不支持這個。如果你試圖在運行時包含代碼,理論上有辦法做到這一點,但沒有什麼直接的,這幾乎肯定不是一個好主意。你試圖完成什麼? – dhm

回答

6

Java在源代碼編譯時沒有包含指令。

它也沒有在運行時評估新的Java源代碼的評估。

將新的Java代碼加入正在運行的Java VM中的唯一方法是通過類加載。但是,自javax.script(Java 6)(一種支持足夠的運行時(例如Java 8的Nashorn Javascript實現))的出現,可以導入和評估一些調用Java API的腳本代碼。這是一個巨大的主題&太大,無法在這裏深入探討。

+1

只是一個想法:也許一些編譯工具有這個功能。例如,前一段時間[某人發佈了一個問題](http://stackoverflow.com/questions/27748415/is-there-something-like-ifdef-for-methods-in-java#comment43908043_27748415)關於如何刪除方法像C一樣有條件地聲明'#ifdef'。我知道用java你不能這樣做;我**不知道的是,你可以用螞蟻。你可以指定一些「特殊」的註釋,螞蟻必須尋找_before_編譯,以及當找到這些註釋時它應該如何表現。也許有一種方法可以用Ant來做'包括'? – BackSlash

+0

當然,如果有某種形式的預編譯過程來生成代碼,那麼這將起作用,但這意味着其他人將不得不按照您的構建過程,並且您的IDE將無法正常使用這些文件,等等。一種可能性是可以有一個初始的預處理步驟,從非Java格式(BNF語法或你有什麼)生成源代碼,然後使用普通的Java。但是那不是像OP想要的#include。 – kittylyst

0

Java沒有等效於eval或任何其他能夠在運行時評估代碼的構造。它完全能夠解析XML等外部數據,並對所發現的內容採取行動。它也可以啓動並捕獲來自外部進程的輸出,這很可能是動態生成的代碼。此過程的細節取決於您的操作系統。