Kotlin 泛型类重载?

som*_*dy4 3 generics overloading variadic kotlin

我想创建一些类型参数可变数量的类。

例如,一个元组类:

class Tuple<T1>{
    //blah 
}
class Tuple<T1,T2>{
    //blah blah 
}
class Tuple<T1,T2,T3>{
    //blah blah blah
}
Run Code Online (Sandbox Code Playgroud)

但它显示“重新声明”错误,有什么建议吗?

hot*_*key 5

你不能这样做,因为一个 Kotlin 类必须有一个唯一的完全限定名(即它的包名加上简单的名称Tuple)。

根据你喜欢什么,你能说出下面的这些类TupleN模式(Tuple1Tuple2等),使通用的接口Tuple,也是一组出厂功能共享名称(tuple(...)用不同数量的参数),用于创建不同arities的元组:

fun <T1> tuple(t1: T1) = Tuple1(t1)

fun <T1, T2> tuple(t1: T1, t2: T2) = Tuple2(t1, t2)

fun <T1, T2, T3> tuple(t1: T1, t2: T2, t3: T3) = Tuple3(t1, t2, t3)

/* ... */
Run Code Online (Sandbox Code Playgroud)

面对类似的问题,我个人求助于生成我需要的TupleN