• 三、动态类
    • 3. 动态类
    • 3.1 动态类方法说明
      • 3.1.1 构造函数
      • 3.1.2 构造函数
      • 3.1.3 命名的名称属性
      • 3.1.4 用户代码属性
      • 3.1.5 得到实际编译的类名称
      • 3.1.6 获得编译后的 Class 对象
      • 3.1.7 编译用户代码
    • 3.2 举个例子

    三、动态类

    3. 动态类

    类: org.voovan.tools.compiler.clazz.DynamicClass

    3.1 动态类方法说明

    3.1.1 构造函数

    1. public DynamicClass(String name, String code)
    • name: 命名的名称。
    • code: 用户代码。

    3.1.2 构造函数

    1. public DynamicClass(File file, String charset)
    • 默认使用文件名作为命名
    • file: 脚本文件路径。
    • charset: 脚本文件编码。

    3.1.3 命名的名称属性

    1. public String getName()
    2. public void setName(String name)
    • name: 命名的名称。

    3.1.4 用户代码属性

    1. public String getCode()
    2. public void setCode(String code)
    • code: 脚本代码。

    3.1.5 得到实际编译的类名称

    1. public String getClassName()
    • 返回值: 实际编译的类名称。

    3.1.6 获得编译后的 Class 对象

    1. public Class getClazz()
    • 返回值: 实际编译的类对象。

    3.1.7 编译用户代码

    1. public void compileCode()

    3.2 举个例子

    1. code = "package org.hocate.test;\r\n\r\n"
    2. + "import org.voovan.tools.TString;\r\n"
    3. + "public class TestSay {\r\n"
    4. + "\t public String say(){\r\n"
    5. + "\t\t System.out.println(\"helloword\");\r\n"
    6. + "\t\t return TString.removePrefix(\"finished\"); \r\n"
    7. + "\t }\r\n"
    8. + "}\r\n";
    9. DynamicClass dynamicClass = new DynamicClass("TestCode",code); // 文件形式的脚本
    10. for(int i=0;i<4;i++) {
    11. System.out.println("\r\n=============Run "+i+"=============");
    12. long startTime = System.currentTimeMillis();
    13. //运行脚本
    14. Class clazz = dynamicClass.getClazz();
    15. System.out.println("==>name:" +dynamicClass.getName());
    16. System.out.println("==>classname:" +dynamicClass.getClassName());
    17. Object testSay = DynamicCompilerManager.newInstance("TestSay",null);
    18. try {
    19. Object obj = TReflect.invokeMethod(testSay, "say");
    20. System.out.println("==>RunTime: " + (System.currentTimeMillis()-startTime )+"\r\n==>Result: " + obj);
    21. }catch (Exception e){
    22. Logger.error(e);
    23. }
    24. TEnv.sleep( 1000 );
    25. }