Можно ли перегрузить неявные преобразования типов в 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.
}