无法自动推断类型后,请在运行时选择重载函数

时间:2019-06-10 11:32:07

标签: generics kotlin overloading

我有一个调用重载函数funcA的函数。假设我们有不同的类型ABC,它们都实现了抽象类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")
}

有什么办法可以更好地解决这个问题?

0 个答案:

没有答案