Выберите перегруженную функцию во время выполнения после того, как тип не может быть автоматически выведен - PullRequest
1 голос
/ 10 июня 2019

У меня есть функция, которая вызывает перегруженную функцию funcA. Допустим, у нас есть разные типы A, B и C, которые реализуют абстрактный класс Top<T extends Serializable>. Теперь данная функция funcA существует для универсального типа funcA(p0:Top<T extends Serializable>), а также для других данных типов funcA(p0:A), funcA(p0:B) и т. Д.

Теперь я хочу вызвать эту функцию, когда я получил только общую переменную it:Top<out Serializable>. Если я сейчас просто напишу funcA(it), Kotlin не сможет автоматически определить, какую перегруженную функцию вызывать, поскольку точный тип теперь удален.

Что работает, так это проверять данные типы и приводить их перед вызовом funcA:

when(it) {
    is A -> funcA(it)
    is B -> funcA(it)
    is C -> funcA(it)
    else -> error("Cannot infer correctly")
}

Есть ли способ решить эту проблему лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...