说我有这个代码,使用一些输入(例如,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就像它有它自己的问题。 我想知道,我可以在运行时生成它们吗?所以我会像第一个例子那样有一个输入映射,并且会动态地创建第二个例子的映射。 当然,生成它只是建立一个字符串的问题,但编译和加载它呢?
注意:我知道性能提升是如此之少,它是过早优化的完美例子。因此这是一个学术问题,我对运行时生成和代码编译感兴趣。