Groovy 将通过选择参数类型按字母顺序排列的方法来解决模棱两可的方法调用。在以下示例中,如果 Groovy 调用 MyClass.printIt(null),则将调用采用“A”类型参数的方法。
如果您重构此代码以将类 A 重命名为类 C,您会发现带有 null myVariable 的调用将解析为采用“B”类型参数的方法,即底部的参数。
class MyTest {
public static void main(String[] args) {
B myVariable = new B()
new MyClass().printIt(myVariable)
myVariable = null
new MyClass().printIt(myVariable)
}
}
class A {}
class B {}
class MyClass {
void printIt(A variable) {
println "TOP method called"
}
void printIt(B variable) {
println "BOTTOM method called"
}
}
上面列出的代码产生以下输出
BOTTOM 方法调用
TOP 方法将 其称为 top 方法,具有 B 类型的变量
一旦 A 类重命名为 C 类,输出将变为
BOTTOM 方法调用
BOTTOM 方法调用
尝试尽可能多的排列,当传入的变量为空时,调用具有最低字母名称的类的方法,即使该变量是为另一个类键入的。
groovy --version Groovy 版本:2.0.5 JVM:1.6.0_33 供应商:Sun Microsystems Inc. 操作系统:Windows 7
我的问题是为什么 Groovy 会这样做,这是设计使然还是错误,这种行为是否记录在任何地方?
戴夫