Java实现动态创建类操作示例
2020-03-11 17:50
302 查看
本文实例讲述了Java实现动态创建类操作。分享给大家供大家参考,具体如下:
Java可以创建动态类,学习看到,此处作为笔记。
代码如下:
import java.io.IOException; import java.lang.reflect.Method; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.SimpleJavaFileObject; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; public class Client { public static void main(String[] args) throws Exception { // Java 源代码 String sourceStr = "public class Hello{public String sayHello(String name){" + "return \"Hello,\"+name+\"!\";}}"; // 类名及文件名 String clsName = "Hello"; // 方法名 String methodName = "sayHello"; // 当前编译器 JavaCompiler cmp = ToolProvider.getSystemJavaCompiler(); // Java标准文件管理器 StandardJavaFileManager fm = cmp.getStandardFileManager(null, null, null); // Java 文件对象 JavaFileObject jfo = new StringJavaObject(clsName, sourceStr); // 编译参数,类似于Javac <options> 中的options List<String> optionsList = new ArrayList<String>(); // 编译文件的存放地方,注意:此处是为Eclipse 工具特设的 optionsList.addAll(Arrays.asList("-d", "./bin")); // 要编译的单元 List<JavaFileObject> jfos = Arrays.asList(jfo); // 设置编译环境 JavaCompiler.CompilationTask task = cmp.getTask(null, fm, null, optionsList, null, jfos); // 编译成功 if (task.call()) { // 生成对象 Object obj = Class.forName(clsName).newInstance(); Class<? extends Object> cls = obj.getClass(); // 调用sayHello方法 Method m = cls.getMethod(methodName, String.class); String str = (String) m.invoke(obj, "Dynamic Compilation"); System.out.println(str); } } } // 文本中的Java对象 class StringJavaObject extends SimpleJavaFileObject { // 源代码 private String content = ""; // 遵循Java规范的类名及文件 public StringJavaObject(String _javaFileName, String _content) { super(_createStringJavaObjectUri(_javaFileName), Kind.SOURCE); content = _content; } // 产生一个URL资源库 private static URI _createStringJavaObjectUri(String name) { // 注意此处没有设置包名 return URI.create("String:///" + name + Kind.SOURCE.extension); } // 文本文件代码 @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { // TODO Auto-generated method stub return content; } }
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- JS实现为动态创建的元素添加事件操作示例
- JS实现为动态创建的元素添加事件操作示例
- Java实现创建运行时类的对象操作示例
- Java—java中如何实现动态数组的创建与赋值
- 通过动态代理(Proxy)实现的数据库连接池的创建连接与归还链接的操作的简单的实现流程
- Java实现二叉树的建立、计算高度与递归输出操作示例
- Java中使用synchronized关键字实现简单同步操作示例
- Java操作redis实现增删查改功能的方法示例
- Java程序员从笨鸟到菜鸟之(八十七)跟我学jquery(三)jquery动态创建元素和常用函数示例
- Java程序员从笨鸟到菜鸟之(八十七)跟我学jquery(三)jquery动态创建元素和常用函数示例
- Java Jedis操作Redis示例(二)——list 生产者/消费者模式实现消息队列
- Java实现大文件的切割与合并操作示例
- Java实现的动态数字时钟功能示例【显示世界时间】
- Python使用type动态创建类操作示例
- Java实现的生成二维码和解析二维码URL操作示例
- java利用反射实现动态代理示例
- Java动态实现创建目录并以当前系统时间作为文件名
- JAVA中使用代码创建多数据源,并实现动态切换(一)
- 用java实现mybatis的动态创建表、修改表功能
- Java使用注解和动态代理实现方法调用时的日志记录示例