我是论坛的新手,对 Java 编码很陌生。
无论如何,我正在实现我的 Java 代码来动态编译和运行不同的类,这些类是先验未知的,并且可能会随着时间的推移而改变(不太频繁)。我发现这里提出的基于 javax.tools 的示例非常有用,但是由于我的工作应该稍后实时运行,所以我想尽可能避免使用 Java 反射。您知道是否存在一种无需使用再膨胀即可运行已编译代码的方法吗?编译后我可以检索一些指向类的变量,然后用它来实例化类?
谢谢提前卢卡
我是论坛的新手,对 Java 编码很陌生。
无论如何,我正在实现我的 Java 代码来动态编译和运行不同的类,这些类是先验未知的,并且可能会随着时间的推移而改变(不太频繁)。我发现这里提出的基于 javax.tools 的示例非常有用,但是由于我的工作应该稍后实时运行,所以我想尽可能避免使用 Java 反射。您知道是否存在一种无需使用再膨胀即可运行已编译代码的方法吗?编译后我可以检索一些指向类的变量,然后用它来实例化类?
谢谢提前卢卡
嘿,看我不知道这是对的还是你想要的,但我会这样划分框架......
界面界面只是为了更容易理解。
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 是有效的......如果错了请纠正我