Java 确定Groovy表达式的返回类型
我有一些带有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()方法获取对象的类,或者只需执行以下操
谢谢一个非常简单的方法就是使用。计算指定的字符串表达式并返回结果。表达式的类型结果是
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
)