Groovy AST 转换 - 如何确定 MethodCallExpression 的返回类型?
使用 Groovy AST 转换,我如何找出返回类型MethodCallExpression?
即使我在方法定义中显式定义了方法的返回类型,MethodCallExpression.getType()
也始终返回 java.lang.Object
。
With Groovy AST Transformations, how can I figure out the return type of a MethodCallExpression?
MethodCallExpression.getType()
always returns java.lang.Object
even if I explicitly define the return type of the method in the method definition.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于 groovy 的动态特性,AST 在编译时无法知道方法调用表达式的返回类型。例如:
看起来很简单。
foo
返回一个字符串,因此e.foo()
的 MethodCallExpression 应该具有String
类型,对吧?但是如果元类中的 foo 发生了变化怎么办?Groovy 编译器没有足够的信息来对方法调用做出任何假设,因为它可能在运行时发生变化,因此它必须将其编译为对象。
Due to the dynamic nature of groovy, the AST can't know the return type of a method call expression at compile time. For example:
Looks simple enough.
foo
returns a string, so the MethodCallExpression fore.foo()
should have a type ofString
, right? But what if foo is changed in the metaClass?The groovy compiler just doesn't have enough information to make any assumptions about the method call since it could change at runtime, so it has to compile it down to an Object.