两次实现通用接口的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) { } } 许

长话短说:拥有显式接口实现的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) {
    }
}

许多语言甚至不允许你超载。你想要这个有什么原因吗?如果您真的需要它,您可以通过检查
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) {
    }
}