Kotlin 泛型 class 重载?
Kotlin generic class overload?
我想创建一些 class 类型参数数量可变的 es。
例如元组class:
class Tuple<T1>{
//blah
}
class Tuple<T1,T2>{
//blah blah
}
class Tuple<T1,T2,T3>{
//blah blah blah
}
但它显示 "redeclaration" 错误,有什么建议吗?
你不能那样做,因为 Kotlin class 必须有一个唯一的 完全限定名称 (即它的包名称加上简单名称 Tuple
).
根据您的喜好,您可以按照 TupleN
模式(Tuple1
、Tuple2
等)命名那些 class 并创建一个通用接口 Tuple
,还有一组共享名称 (tuple(...)
) 的工厂函数,它们具有不同数量的参数,用于创建不同元数的元组:
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 the TupleN
classes。
我想创建一些 class 类型参数数量可变的 es。
例如元组class:
class Tuple<T1>{
//blah
}
class Tuple<T1,T2>{
//blah blah
}
class Tuple<T1,T2,T3>{
//blah blah blah
}
但它显示 "redeclaration" 错误,有什么建议吗?
你不能那样做,因为 Kotlin class 必须有一个唯一的 完全限定名称 (即它的包名称加上简单名称 Tuple
).
根据您的喜好,您可以按照 TupleN
模式(Tuple1
、Tuple2
等)命名那些 class 并创建一个通用接口 Tuple
,还有一组共享名称 (tuple(...)
) 的工厂函数,它们具有不同数量的参数,用于创建不同元数的元组:
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 the TupleN
classes。