說我有這個代碼,使用一些輸入(例如,URL路徑),以確定要運行的方法,通過反射:運行時代碼生成和編譯
// init
map.put("https://stackoverflow.com/users/*", "viewUser");
map.put("/users", "userIndex");
// later
String methodName = map.get(path);
Method m = Handler.class.getMethod(methodName, ...);
m.invoke(handler, ...);
此使用反射所以性能可以得到改善。它可以這樣做:
// init
map.put("https://stackoverflow.com/users/*", new Runnable() { public void run() { handler.viewUser(); } });
map.put("/users", new Runnable() { public void run() { handler.userIndex(); } });
// later
Runnable action = map.get(path);
action.run();
但手動創建所有Runnable
s就像它有它自己的問題。 我想知道,我可以在運行時生成它們嗎?所以我會像第一個例子那樣有一個輸入映射,並且會動態地創建第二個例子的映射。 當然,生成它只是建立一個字符串的問題,但編譯和加載它呢?
注意:我知道性能提升是如此之少,它是過早優化的完美例子。因此這是一個學術問題,我對運行時生成和代碼編譯感興趣。