2011-01-16 3 views
2

Скажем, у меня есть функцияМогу ли я перегружать неявные преобразования типов в Groovy?

def method1(MyClass2 mc2) {...} 

и я называю его с объектом типа MyClass1. Есть ли способ, который я могу указать, как неявно конвертировать из MyClass1 в MyClass2, чтобы вызов метода работал без необходимости явно указывать method1(mc1 as MyClass2)?

ответ

4

Если MyClass1 не реализует/не расширяет MyClass2, я ничего не знаю о том, что будет делать преобразование «как MyClass2» без перегрузки старой резервной Java-технологии. Явное перегружать метод с подписью, включая 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. 
} 
+3

вы можете переопределить метод 'Object asType (Class clazz)', чтобы написать собственный конвертер для обработки 'myObj1 как MyClass2' http://mrhaki.blogspot.com/2009/11/groovy-goodness-define-your -own -type.html –

Смежные вопросы