两次实现通用接口的Kotlin类(使用不同类型)
长话短说:拥有显式接口实现的C#经验,我试图在Kotlin上做同样的事情,但失败了(或者还没有找到方法)。情况:两次实现通用接口的Kotlin类(使用不同类型),kotlin,generics,Kotlin,Generics,长话短说:拥有显式接口实现的C#经验,我试图在Kotlin上做同样的事情,但失败了(或者还没有找到方法)。情况: interface IProblem<T> { fun solve(t: T) } class Puzzle: IProblem<Int>, IProblem<Any> { override fun solve(t: Int) { } override fun solve(t: Any) { } } 许
interface IProblem<T> {
fun solve(t: T)
}
class Puzzle: IProblem<Int>, IProblem<Any> {
override fun solve(t: Int) {
}
override fun solve(t: Any) {
}
}
许多语言甚至不允许你超载。你想要这个有什么原因吗?如果您真的需要它,您可以通过检查
t is Int
并指定t:Any
手动“单态化”。这不会因为类型擦除而发生。它可以在C#中工作,但在Java/JVM/Kotlin-JVM中不起作用。在这种特殊情况下,由于您支持的唯一类型是Any
和Int
,因此您可以从接口中删除泛型,让它在Any
上运行,如果(t是Int)则使用
在您的单求解功能中。请遵循多种语言,甚至不允许您超载。你想要这个有什么原因吗?如果您真的需要它,您可以通过检查t is Int
并指定t:Any
手动“单态化”。这不会因为类型擦除而发生。它可以在C#中工作,但在Java/JVM/Kotlin-JVM中不起作用。在这种特殊情况下,由于您支持的唯一类型是Any
和Int
,因此您可以从接口中删除泛型,让它在Any
上运行,并在单个solve
函数中使用if(t是Int)
。请遵循以下步骤
class Puzzle: IProblem<Int>, IProblem<Any> {
override fun IProblem<Int>.solve(t: Int) {
}
override fun IProblem<Any>.solve(t: Any) {
}
}