我可以重载Groovy中的隐式类型转换吗?

时间:2011-01-16 02:58:56

标签: groovy

说我有一个功能

def method1(MyClass2 mc2) {...}

我用MyClass1类型的对象来调用它。有没有办法可以指定如何从MyClass1隐式转换为MyClass2,以便方法调用无需明确说出method1(mc1 as MyClass2)即可使用?

1 个答案:

答案 0 :(得分:4)

如果MyClass1没有实现/扩展MyClass2,那么在没有旧的备用Java方法重载的情况下,没有任何我知道会做“作为MyClass2”的转换。使用包含MyClass1的签名显式重载方法:

def method1(MyClass1 mc1) { 
    method1(mc1 as MyClass2)
}

另一个更常常的替代方法是不显式键入method1,以便它不要求你有一个MyClass2的实例:

def method1(mc) {
    // do stuff and let mc walk/talk/quack like MyClass2
    // or even do the "as MyClass2" in this method if you need it for something further down.
}