当泛型类型绑定到 Any 时,kotlin 重载解析歧义
kotlin overload resolution ambiguity when generic type is bound to Any
考虑 this code:
fun main() {
class A<T> {
fun m(t: T): Unit {
print("T")
}
fun m(t: List<T>): Unit {
print("List<T>")
}
}
val a: A<Any> = A()
val l: List<Any> = listOf()
a.m(l)
}
a.m(l)
调用似乎不明确,出现以下错误:
Overload resolution ambiguity: public final fun m(t: Any): Unit defined in main.A public final fun m(t: List<Any>): Unit defined in main.A
我的直觉告诉我m(t: List<T>)
重载应该更具体,但我的直觉在过去已经错了一次,when I had a similar case in Java。
我可以这样调用“错误的”重载:
a.m(l as Any)
但是我如何显式调用所需的 m(t: List<T>)
重载?转换 a.m(l as List<Any>)
无效。
辅助功能可以提供帮助:
fun <T> A<T>.mList(l: List<T>) {
this.m(l);
}
a.mList(l)
仍然对不涉及像这样的任何间接寻址的替代方案感到好奇
考虑 this code:
fun main() {
class A<T> {
fun m(t: T): Unit {
print("T")
}
fun m(t: List<T>): Unit {
print("List<T>")
}
}
val a: A<Any> = A()
val l: List<Any> = listOf()
a.m(l)
}
a.m(l)
调用似乎不明确,出现以下错误:
Overload resolution ambiguity: public final fun m(t: Any): Unit defined in main.A public final fun m(t: List<Any>): Unit defined in main.A
我的直觉告诉我m(t: List<T>)
重载应该更具体,但我的直觉在过去已经错了一次,when I had a similar case in Java。
我可以这样调用“错误的”重载:
a.m(l as Any)
但是我如何显式调用所需的 m(t: List<T>)
重载?转换 a.m(l as List<Any>)
无效。
辅助功能可以提供帮助:
fun <T> A<T>.mList(l: List<T>) {
this.m(l);
}
a.mList(l)
仍然对不涉及像这样的任何间接寻址的替代方案感到好奇