- 四、动态函数
- 4. 动态函数
- 3.1 动态类方法说明
- 3.1.1 构造函数
- 3.1.2 构造函数
- 3.1.3 包名属性
- 3.1.4 命名的名称属性
- 3.1.5 是否支持代码中的 import
- 3.1.6 用户代码属性
- 3.1.7 得到实际编译的类名称
- 3.1.8 获得编译后的 Class 对象
- 3.1.9 增加/删除一个调用参数
- 3.1.10 增加/删除一个预置导入类
- 3.1.11 导入动态函数的管理
- 3.1.12 编译用户代码
- 3.1.13 执行动态函数
- 3.2 举个例子
四、动态函数
4. 动态函数
类: org.voovan.tools.compiler.function.DynamicFunction
3.1 动态类方法说明
3.1.1 构造函数
public DynamicFunction(String name, String code)
name: 命名的名称。code: 用户代码。
3.1.2 构造函数
public DynamicFunction(File file, String charset)
- 默认使用文件名作为命名
file: 脚本文件路径。charset: 脚本文件编码。
3.1.3 包名属性
public String getPackageName()public void setPackageName(String packageName)
- 设置/获取动态函数编译的类的包名,默认:
org.voovan.tools.compiler.temporary name: 包名。
3.1.4 命名的名称属性
public String getName()public void setName(String name)
name: 命名的名称。
3.1.5 是否支持代码中的 import
public boolean isEnableImportInCode()public void enableImportInCode(boolean enableImportInCode)
enableImportInCode: true:支持代码中的 import, false: 不支持代码中的 import。
3.1.6 用户代码属性
public String getCode()public void setCode(String code)
- 用户代码
code: 用户代码。
3.1.7 得到实际编译的类名称
public String getClassName()
返回值: 实际编译的类名称。
3.1.8 获得编译后的 Class 对象
public Class getClazz()
返回值: 实际编译的类对象。
3.1.9 增加/删除一个调用参数
public void addPrepareArg(int argIndex, Class argClazz, String argName)public void removePrepareArg(int argIndex)
argIndex: 调用参数的索引。argClazz: 调用参数的类。argName: 调用参数的名称。
3.1.10 增加/删除一个预置导入类
public void addImport(Class clazz)public void removeImport(Class clazz)
clazz: 导入类对象。
3.1.11 导入动态函数的管理
public void addImportFunction(String name)public List<String> getImportFunctionx()public void clearImportFunctions()
name: 动态函数名称。
3.1.12 编译用户代码
public void compileCode()
3.1.13 执行动态函数
public <T> T call(Object... args)
args: 调用参数。返回值: 动态函数执行后的结果。
3.2 举个例子
{String code = "import java.util.ArrayList;\n\n" +"ArrayList list = new ArrayList();\n" +"System.out.println(temp1+ temp2); \n" +"SubFunCode();\n" +"return list;\n";DynamicFunction dynamicFunction = new DynamicFunction("TestCode",code); //字符串形式的脚本//增加默认导入dynamicFunction.addImport(ArrayList.class);//增加对其他动态函数的引用dynamicFunction.addImportFunction("SubFunCode");//启用脚本中的 import 导入dynamicFunction.enableImportInCode(true);//准备脚本的默认参数dynamicFunction.addPrepareArg(0, String.class, " temp1");dynamicFunction.addPrepareArg(1, String.class, " temp2");System.out.println("=============Args list=============");System.out.println("arg0 -> 0 String temp1 = hely ");System.out.println("arg1 -> 0 String temp2 = ho \n");System.out.println("============= result =============");for(int i=0;i<4;i++) {System.out.println("\r\n=============Run "+i+"=============");System.out.println("==>name:" +dynamicFunction.getName());System.out.println("==>classname:" +dynamicFunction.getClassName());long startTime = System.currentTimeMillis();//运行脚本List list = dynamicFunction.call("hely ", "ho");System.out.println("==>RunTime: "+(System.currentTimeMillis()-startTime )+"\r\n==>Result: " + list);TEnv.sleep( 1000 );}}
