Java实现动态创建类操作示例
本文实例讲述了Java实现动态创建类操作。分享给大家供大家参考,具体如下:
Java可以创建动态类,学习看到,此处作为笔记。
代码如下:
importjava.io.IOException; importjava.lang.reflect.Method; importjava.net.URI; importjava.util.ArrayList; importjava.util.Arrays; importjava.util.List; importjavax.tools.JavaCompiler; importjavax.tools.JavaFileObject; importjavax.tools.SimpleJavaFileObject; importjavax.tools.StandardJavaFileManager; importjavax.tools.ToolProvider; publicclassClient{ publicstaticvoidmain(String[]args)throwsException{ //Java源代码 StringsourceStr="publicclassHello{publicStringsayHello(Stringname){" +"return\"Hello,\"+name+\"!\";}}"; //类名及文件名 StringclsName="Hello"; //方法名 StringmethodName="sayHello"; //当前编译器 JavaCompilercmp=ToolProvider.getSystemJavaCompiler(); //Java标准文件管理器 StandardJavaFileManagerfm=cmp.getStandardFileManager(null,null, null); //Java文件对象 JavaFileObjectjfo=newStringJavaObject(clsName,sourceStr); //编译参数,类似于Javac中的options List optionsList=newArrayList (); //编译文件的存放地方,注意:此处是为Eclipse工具特设的 optionsList.addAll(Arrays.asList("-d","./bin")); //要编译的单元 List jfos=Arrays.asList(jfo); //设置编译环境 JavaCompiler.CompilationTasktask=cmp.getTask(null,fm,null, optionsList,null,jfos); //编译成功 if(task.call()){ //生成对象 Objectobj=Class.forName(clsName).newInstance(); Classcls=obj.getClass(); //调用sayHello方法 Methodm=cls.getMethod(methodName,String.class); Stringstr=(String)m.invoke(obj,"DynamicCompilation"); System.out.println(str); } } } //文本中的Java对象 classStringJavaObjectextendsSimpleJavaFileObject{ //源代码 privateStringcontent=""; //遵循Java规范的类名及文件 publicStringJavaObject(String_javaFileName,String_content){ super(_createStringJavaObjectUri(_javaFileName),Kind.SOURCE); content=_content; } //产生一个URL资源库 privatestaticURI_createStringJavaObjectUri(Stringname){ //注意此处没有设置包名 returnURI.create("String:///"+name+Kind.SOURCE.extension); } //文本文件代码 @Override publicCharSequencegetCharContent(booleanignoreEncodingErrors) throwsIOException{ //TODOAuto-generatedmethodstub returncontent; } }
选自:编写高质量代码改善Java程序的151个建议
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。