2014-06-26 63 views
3

在運行時,Java可能會給一個類甚至是它的函數一個新的名字。通過在程序啓動時讀取新名稱作爲參數或配置文件?你可以動態重命名類名嗎?

更新:

這是這個的目的。我使用Java Script Engine來允許任何與JSR 223兼容的腳本語言訪問我們的API。我們的一些客戶不習慣使用Java,它的命名約定,並且使用自己特定的命名約定會感覺更舒適。所以我需要給他們動態改變API的類和函數名稱的能力,而不用在代碼中改變它們。有人建議我用地圖和某種與字符串名稱和實際的Java名稱例如結合

map.put("Hello",HelloWorld.class) 

    Object obj = new Hello(); 

這應該是相同的,

Object obj = new HelloWorld(); 

如果這是不可能的,請告訴我爲什麼。我需要一個堅實的Java專業知識答案。這是我的聯盟,我需要事實告訴人們爲什麼這是不可能的,即使我自己幾乎可以肯定這是不可能的。

可能的解決方案:

這是我想出來的closet解決方案。使用此鏈接, https://weblogs.java.net/blog/2005/08/10/reflection-and-dynamically-changing-classes 我可以在運行時添加名稱,使用組合來創建適配器類,然後編譯該文件,並且腳本語言人員可以使用其定義的名稱而不是我的API的Java名稱。

這是唯一可以實現的方法嗎?

更新2:

這裏是任何人試圖這也另一種可能的解決方案,

http://asm.ow2.org/doc/faq.html

這會直接帶您到他們的常見問題,這將有一個對這個確切的問題。

+0

我不這麼認爲......但只是想問你爲什麼需要重命名你的類名? –

+2

如果你需要動態*類*名稱,可能會有比你想象的更好的設計模式 –

+4

聽起來像一個XY問題(http://meta.stackexchange.com/questions/66377/what-is-the- xy-problem/66378#66378) - 你想要做什麼/解決什麼? – Joe

回答

2

不,您將需要重構引用並重新編譯執行。

+0

所以只是爲了澄清,即使我想我不能這樣做?不是與反射或ScriptEnine或任何類型的綁定? –

+0

@codeMonkey nop – Typo

+0

這個怎麼樣? http://stackoverflow.com/questions/2897685/dynamic-loading-a-class-in-java-with-a-different-package-name?rq=1或僅適用於軟件包。 –

0

是的,你可以使用javassist來做到這一點。 特別是,你必須編輯NewExpr。

相關問題