假设我有这段代码,它使用一些输入(例如 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();
但是手动创建所有类似Runnable
的 s 有其自身的问题。我想知道,我可以在运行时生成它们吗?所以我会像第一个示例一样有一个输入映射,并会动态创建第二个示例的映射。当然,生成它只是构建一个字符串的问题,但是编译和加载它呢?
注意:我知道性能提升是如此之小,这是过早优化的完美示例。因此这是一个学术问题,我对代码的运行时生成和编译感兴趣。