Java 确定Groovy表达式的返回类型

Java 确定Groovy表达式的返回类型,java,groovy,abstract-syntax-tree,Java,Groovy,Abstract Syntax Tree,我有一些带有Groovy表达式的字符串。我需要: 执行java.lang.String中包含的Groovy表达式 将表达式的结果作为对象获取 确定结果对象的类型 可能吗?另外,若我不使用Groovy的动态特性,我将能够“静态地”确定表达式的类型,即在编译时不执行表达式本身 谢谢一个非常简单的方法就是使用。计算指定的字符串表达式并返回结果。表达式的类型结果是Object def object = Eval.me('1 + 1') 您可以使用getClass()方法获取对象的类,或者只需执行以下操

我有一些带有Groovy表达式的字符串。我需要:

  • 执行java.lang.String中包含的Groovy表达式
  • 将表达式的结果作为对象获取
  • 确定结果对象的类型
  • 可能吗?另外,若我不使用Groovy的动态特性,我将能够“静态地”确定表达式的类型,即在编译时不执行表达式本身


    谢谢

    一个非常简单的方法就是使用。计算指定的字符串表达式并返回结果。表达式的类型结果是
    Object

    def object = Eval.me('1 + 1')
    
    您可以使用
    getClass()
    方法获取对象的类,或者只需执行以下操作:

    assert object.class == Integer
    
    在本例中,无法在编译时确定静态类型检查

    @groovy.transform.TypeChecked
    void test() {
        Integer object = Eval.me('1 + 1')
        assert object.class == Integer
    }
    
    [Static type checking] - Cannot assign value of type java.lang.Object to variable of type java.lang.Integer
    

    一个非常简单的方法是使用。计算指定的字符串表达式并返回结果。表达式的类型结果是
    Object

    def object = Eval.me('1 + 1')
    
    您可以使用
    getClass()
    方法获取对象的类,或者只需执行以下操作:

    assert object.class == Integer
    
    在本例中,无法在编译时确定静态类型检查

    @groovy.transform.TypeChecked
    void test() {
        Integer object = Eval.me('1 + 1')
        assert object.class == Integer
    }
    
    [Static type checking] - Cannot assign value of type java.lang.Object to variable of type java.lang.Integer
    

    你可以声明
    objectobject=Eval.me('1+1')
    ,我相信它会起作用吗?但我想那应该是在运行时,这是你的观点;-)是的,它可以工作,但我们不知道编译时的类型。不确定该类型是否存储在
    ASTNode
    元数据中(例如,如果将字符串传递给
    AstBuilder
    ),您可以声明
    Object Object=Eval.me('1+1')
    ,我相信它可以工作吗?但我想那应该是在运行时,这是你的观点;-)是的,它可以工作,但我们不知道编译时的类型。不确定类型是否存储在
    ASTNode
    元数据中(例如,如果将字符串传递给
    AstBuilder