代码之家  ›  专栏  ›  技术社区  ›  Bart van Heukelom

运行时代码生成和编译

  •  3
  • Bart van Heukelom  · 技术社区  · 15 年前

    假设我有这样的代码,它使用一些输入(例如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 像这样有它自己的问题。 我想知道,我能在运行时生成它们吗?所以我有一个和第一个示例一样的输入映射,并动态地创建第二个示例的映射。 当然,生成它只是构建一个字符串的问题,但是编译和加载它呢?

    注: 我知道性能提升太小了,这是一个过早优化的完美例子。因此,这是一个学术问题,我对运行时生成和编译代码感兴趣。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Yishai    15 年前

        2
  •  2
  •   Silly Freak    14 年前

    here

    Compiler Iterable<JavaFileObject> JavaFileManager

    ClassLoader

        3
  •  1
  •   PaÅ­lo Ebermann    14 年前

    Method

        4
  •  0
  •   thejh    15 年前
    推荐文章