在运行时编写和实现新的Java类文件
是否有可能以某种方式将新的
Java类“导入”到正在运行的程序中并使用它?
我可以让程序创建一个类型为’.java’的新文件,然后将其包含在项目文件中并引用它而不必重新启动程序吗? 以下是我的意思的一个例子: import java.io.*; public class Program { File JClass = new File("JClass.java"); public static BufferedWriter out = null; public static void main(String[] args) { try { out = new BufferedWriter(new FileWriter("JClass.java")); out.write("public abstract class JClass {"); out.newLine(); out.newLine(); out.write(" public void printSomething(String a) {"); out.newLine(); out.write(" System.out.println(a);"); out.newLine(); out.write(" }"); out.newLine(); out.write("}"); out.close(); } catch (IOException e) { System.exit(-1); } //Somehow import JClass.java as a class here JClass.printSomething("Yay! It worked!"); } } 产生的’JClass.java’文件: public abstract class JClass { public void printSomething(String a) { System.out.println(a); } } 同样,是否可以创建项目源文件之一的副本,编辑文件中的代码,然后以某种方式强制对正在运行的程序进行更改? 在这一点上,我并不在乎实际应用.我只是在探索与编程有关的不同想法.我也明白,这可能是各种各样的灾难.编辑运行代码,并且包括动态的类(我无法想象将检查错误,因为其他类是在构建项目时),可能会产生非常不可预测的结果.我只想玩弄这个想法. 也就是说,如果有人有任何有用的警告或注意事项,我将不胜感激.否则,如果人们不回应“这是一个坏主意”或“有更简单,更好的方法来解决问题”,我将不胜感激.我不是想解决这个问题.我只是在探索这个想法. 那么,这可能吗? 解决方法
Javassist将允许您在运行时修改现有类并创建新类.
http://www.csg.is.titech.ac.jp/~chiba/javassist/ 在Javassist tutorial中,有一节用于从头开始定义新类.查看API以了解如何添加新方法等.查看Javassist API中的CtNewMethod.make. Javassist是JBoss用来实现面向方面编程的东西. 您还可以查看EATS(仪器方法将是您感兴趣的),它使用Javassist在运行时向现有方法添加新代码. Eats不是发布版本,但它有效:o JPDA提供了一些修改已在JVM中加载和运行的类的机制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 深入Java Robot实现控制鼠标和键盘的方法详解
- java – fillRoundRect看似无法正确呈现的问题
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建
- DateUtils.java 日期处理相关工具类
- java – 当我有@ManyToMany时如何设置ForeignKey名称
- 如何使用java applet安全地与数据库通信
- 在java中使用rsa加密和解密大文件
- Java排序算法总结之冒泡排序
- JSP Response.setHeader()方法:设置头信息
- 类型javax.servlet.ServletContext和javax.servlet.Servlet