Можно ли перегрузить неявные преобразования типов в Groovy?

Скажи у меня есть функция

def method1(MyClass2 mc2) {...}

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

1 ответ

Решение

Если 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.
}
Другие вопросы по тегам