Kotlin泛型类重载?

时间:2018-09-12 08:43:02

标签: generics kotlin overloading variadic

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

例如,一个元组类:

class Tuple<T1>{
    //blah 
}
class Tuple<T1,T2>{
    //blah blah 
}
class Tuple<T1,T2,T3>{
    //blah blah blah
}

但是它显示“重新声明”错误,有任何建议吗?

1 个答案:

答案 0 :(得分:4)

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

根据您的喜好,可以按照TupleN模式命名这些类(Tuple1Tuple2等),并创建一个公共接口Tuple,以及一组具有相同名称(tuple(...))的工厂函数,它们使用不同数量的参数来创建不同Arity的元组:

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)

/* ... */

遇到类似的问题,我个人求助于generating我需要的TupleN classes