您好,我有以下代码片段;
class StringCalci
{
static def plus(Integer self, Integer Operand)
{
return self.toInteger() * Operand.toInteger()
}
}
use (StringCalci)
{
println("inside the Use method!")
println( 12 + 3 )
}
println(12+3)
看到groovy中Use
的使用,我惊呆了。问题是我可以在运行时向类添加方法(我自己的方法)。当我查看上面的代码时,我在想 Groovy 如何使事情成为可能! Use
中 println
的使用是将两个给定的数字相乘(因为我有 Override the plus
方法),而外部 println
添加它!我的问题是 Groovy 如何识别 Use
中执行的 println
和 Use
之外的 println
。 Use
是关键字/方法吗?我需要了解这个过程的幕后情况。请告诉我:)
提前致谢:)
最佳答案
欢迎来到动态语言的美妙世界,这里一切皆有可能,一切皆有可能!
此功能称为 Categories .至于实现:
use
实际上不是关键字而是 Groovy 运行时的方法 adds to theObject
class ,这使得它随处可用。- 我认为功能主要在类 GroovyCategorySupport 中实现
- 从 Javadoc 来看,它是基于在
ThreadLocal
中保留覆盖方法的映射,然后在每次方法调用时查询该映射。 - 是的,这对性能来说不是很好,但是 Groovy 和类似语言提供的几乎所有动态“神奇”特性(而且有很多)也是如此。
关于groovy - "Use"在 groovy 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443339/