用javax.tools&编译没有反思地跑

时间:2013-06-18 16:29:21

标签: java reflection dynamic-compilation

我是论坛的新手,也是关于Java编码的新手。

无论如何,我正在实现我的Java代码,以动态编译和运行不同的类,这些类不是先验的,并且可能随着时间而变化(不太频繁)。 我基于javax.tools提出的here示例非常有用,但是,由于我的工作应该在以后实时运行,我希望尽可能避免使用Java反射。 你知道是否存在一种运行编译代码而不使用reflation的方法?在编译之后我可以检索一些变量,它指向类,然后用它来实例化类?

谢谢你的进步 卢卡

1 个答案:

答案 0 :(得分:0)

嘿所以看起来我不知道如果这是对的,或者这就是你想要的但我会将框架分开......

界面界面只是为了更容易理解。

public interface fun {
void fun();
}

所以我们假设有人为您的应用或框架构建代码...... 给他你的界面,告诉他把功能放在那个方法中..这就是这样......

public class TestDestination implements test.fun {
public void fun(){

    System.out.println("Hello");

}
}

那么你所要做的就是加载这个类...你可以从用户输入xml等获取名称......这将是你的执行者

public class TestLoad {
public static void main(String[] args) {
    try {
        Class t1 = Class.forName("test.temp.TestDestination");
        fun temp = (fun) t1.newInstance();
        temp.fun();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

我不确定这是否正是你想要的...但是理想的情况是将加载器保持在一个单独的线程上并在程序开头加载你想要的所有类或延迟加载它...你的选择 希望这可以帮助 我假设class.forName是有效的......如果错误,请纠正我