【发布时间】:2020-11-09 21:20:28
【问题描述】:
考虑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) 调用似乎含糊不清,出现以下错误:
重载解析歧义:public final fun m(t: Any): Unit defined in main.A public final fun m(t: List
): 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>) 不起作用。
【问题讨论】:
-
避免使用
Anyang go for (a new) 接口,它可以是任何东西 - 只是不要使用类 Any -
@Neo:这个问题专门针对
Any。
标签: kotlin generics overload-resolution