三、动态类
3. 动态类
类: org.voovan.tools.compiler.clazz.DynamicClass
3.1 动态类方法说明
3.1.1 构造函数
public DynamicClass(String name, String code)
name
: 命名的名称。code
: 用户代码。
3.1.2 构造函数
public DynamicClass(File file, String charset)
- 默认使用文件名作为命名
file
: 脚本文件路径。charset
: 脚本文件编码。
3.1.3 命名的名称属性
public String getName()
public void setName(String name)
name
: 命名的名称。
3.1.4 用户代码属性
public String getCode()
public void setCode(String code)
code
: 脚本代码。
3.1.5 得到实际编译的类名称
public String getClassName()
返回值
: 实际编译的类名称。
3.1.6 获得编译后的 Class 对象
public Class getClazz()
返回值
: 实际编译的类对象。
3.1.7 编译用户代码
public void compileCode()
3.2 举个例子
code = "package org.hocate.test;\r\n\r\n"
+ "import org.voovan.tools.TString;\r\n"
+ "public class TestSay {\r\n"
+ "\t public String say(){\r\n"
+ "\t\t System.out.println(\"helloword\");\r\n"
+ "\t\t return TString.removePrefix(\"finished\"); \r\n"
+ "\t }\r\n"
+ "}\r\n";
DynamicClass dynamicClass = new DynamicClass("TestCode",code); // 文件形式的脚本
for(int i=0;i<4;i++) {
System.out.println("\r\n=============Run "+i+"=============");
long startTime = System.currentTimeMillis();
//运行脚本
Class clazz = dynamicClass.getClazz();
System.out.println("==>name:" +dynamicClass.getName());
System.out.println("==>classname:" +dynamicClass.getClassName());
Object testSay = DynamicCompilerManager.newInstance("TestSay",null);
try {
Object obj = TReflect.invokeMethod(testSay, "say");
System.out.println("==>RunTime: " + (System.currentTimeMillis()-startTime )+"\r\n==>Result: " + obj);
}catch (Exception e){
Logger.error(e);
}
TEnv.sleep( 1000 );
}