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
ListoptionsList=newArrayList();
//编译文件的存放地方,注意:此处是为Eclipse工具特设的
optionsList.addAll(Arrays.asList("-d","./bin"));
//要编译的单元
Listjfos=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。