Generics 无法自动推断类型后,在运行时选择重载函数
我有一个函数调用重载函数Generics 无法自动推断类型后,在运行时选择重载函数,generics,kotlin,overloading,Generics,Kotlin,Overloading,我有一个函数调用重载函数funcA。假设我们有不同类型的A、B和C,它们都实现了抽象类Top。现在,对于泛型类型funcA(p0:Top)以及其他给定类型funcA(p0:A),funcA(p0:B)等,该给定函数funcA存在 现在,当我只得到一个通用变量时,我想调用该函数it:Top。如果我现在只写funcA(it),Kotlin无法自动推断要调用哪个重载函数,因为确切的类型现在已被删除 工作原理是在调用funcA之前检查给定类型并强制转换它们: when(it) { is A -&
funcA
。假设我们有不同类型的A
、B
和C
,它们都实现了抽象类Top
。现在,对于泛型类型funcA(p0:Top)
以及其他给定类型funcA(p0:A)
,funcA(p0:B)
等,该给定函数funcA
存在
现在,当我只得到一个通用变量时,我想调用该函数it:Top
。如果我现在只写funcA(it)
,Kotlin无法自动推断要调用哪个重载函数,因为确切的类型现在已被删除
工作原理是在调用funcA
之前检查给定类型并强制转换它们:
when(it) {
is A -> funcA(it)
is B -> funcA(it)
is C -> funcA(it)
else -> error("Cannot infer correctly")
}
有什么办法可以更好地解决这个问题吗?你能把
funcA
作为你的Top
类的抽象方法吗?这通常是最好的方法,因为通常的动态方法调度将在运行时处理所有问题。(如本文所示,当涉及泛型时,类型擦除使得静态执行该操作非常困难。)在这种情况下,funcA
方法来自Java库(),因此我不能做太多更改。您能将funcA
作为Top
类的抽象方法吗?这通常是最好的方法,因为通常的动态方法调度将在运行时处理所有问题。(如本文所示,当涉及泛型时,类型擦除使得静态执行该操作非常困难。)在本例中,funcA
方法来自Java库(),因此我不能做太多更改。