Перегрузка общего класса Kotlin? - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу создать несколько классов с переменным номером аргумента типа.

Например, класс кортежа:

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

, но он показывает ошибку "переопределение", любое предложение?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы не можете сделать это, потому что класс Kotlin должен иметь уникальное полностью определенное имя (то есть его имя пакета плюс простое имя Tuple).

В зависимости от того, чтовы можете назвать эти классы в соответствии с шаблоном TupleN (Tuple1, Tuple2 и т. д.) и создать общий интерфейс 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)

/* ... */

Столкнувшись с подобной проблемой, я лично прибегнул к генерации классов TupleN , которые янеобходимо.

...