【问题标题】:Is it possible in a Telosys template to call a function created specifically?是否可以在 Telosys 模板中调用专门创建的函数?
【发布时间】:2020-12-07 13:46:51
【问题描述】:

我使用 Telosys (https://www.telosys.org) 生成 Python 源代码,它工作正常。但是我有一个特定的需求,可以通过调用特定的转换函数来解决。

是否可以创建特定函数并在 Telosys 模板中调用它?

例如:myFunction(“abc”)$something.myFunction(“abc”) 或其他任何内容

如有必要,我可以用 Java、Python 或 JavaScript 等不同语言创建此函数。

【问题讨论】:

    标签: code-generation velocity telosys


    【解决方案1】:

    Telosys 被设计成可扩展的,所以是的,您可以创建自己的函数并在模板中调用它们。 由于 Telosys 是用 Java 编写的,您必须在 Java 中创建这些函数,然后使用“.vm”文件中的“loader”对象来加载您的类并调用该类中定义的方法。

    以下是如何逐步做到这一点:

    1. 使用您首选的 IDE 创建一个 Java 类来定义您的特定方法。此类可以在任何包中(包括“默认/未命名包”),如果您不需要该类的实例,则方法可以是“静态”。

    2. 编译这个类(目标是生成一个简单的“.class”文件或“.jar”文件,如果您愿意)

    3. 将类(或 jar)放入模板包文件夹中:

    • 如果您有“.class”文件,请将其放在“classes”文件夹中
    • 如果您有“.jar”文件,请将其放在“lib”文件夹中

    例子:

    TelosysTools/templates/my-bundle/classes/MyClass.class
    TelosysTools/templates/my-bundle/lib/my-lib.jar
    
    1. 在模板文件(“.vm”)中,使用“$loader”对象来加载您的 Java 类并调用它的任何方法 请参阅此处的“$loader”参考:http://www.telosys.org/templates-doc/objects/loader.html

    如果你所有的方法都是“静态的”,你就不需要实例,所以只需使用“$loader.loadClass()”。示例:

    ## load the class and keep it in a new “$Math” object (no instance created)
    #set( $Math = $loader.loadClass("java.lang.Math")
    ## use the static methods of this class
    $Math.random()
    

    如果您的方法不是“静态”的,因此您需要一个实例,那么请使用“$loader.newInstance()”。例子:

    ## create an instance of StringBuilder and put it in the context with #set
    #set( $strBuilder = $loader.newInstance('java.lang.StringBuilder') )
    ## use the instance to call a method
    $strBuilder.append('aa')
           
    ## create new instance of a specific class : MyTool.class
    #set( $tool = $loader.newInstance('MyTool') )
    ## use the instance to call a method
    $tool.myFunction()
    

    所以总结一下,你可以使用Java-JRE提供的任何类(例如“Math”、“StringBuilder”),你可以通过添加一个“.jar”文件重用现有的库(不要忘记添加依赖项如果 jar 文件不是独立的,则需要)或仅添加一个“.class”文件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多