【发布时间】:2010-10-31 17:37:50
【问题描述】:
假设我有这段代码,它使用一些输入(例如 URL 路径)来通过反射确定要运行的方法:
// init
map.put("/users/*", "viewUser");
map.put("/users", "userIndex");
// later
String methodName = map.get(path);
Method m = Handler.class.getMethod(methodName, ...);
m.invoke(handler, ...);
这使用反射,因此可以提高性能。可以这样做:
// init
map.put("/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();
但是像这样手动创建所有Runnables 有其自身的问题。
我想知道,我可以在运行时生成它们吗?所以我会像第一个示例一样有一个输入映射,并会动态创建第二个示例的映射。
当然,生成它只是构建一个字符串的问题,但是编译和加载它呢?
注意:我知道性能提升是如此之小,这是过早优化的完美示例。因此这是一个学术问题,我对代码的运行时生成和编译感兴趣。
【问题讨论】:
标签: java code-generation classloader javac runtime-compilation