Итерации по произвольному кортежу

Я только начал с Scala и столкнулся с проблемой:

Scala имеет типы Tuple1, Tuple2,..., Tuple22. Scalaquery возвращает кортежи при повторении запросов.

Теперь у меня есть данный класс (ZKs ListitemRenderer), который принимает Object и заполняет списки gui строками, каждая из которых состоит из некоторых ячеек. Но ListitemRenderer не является общим. Поэтому моя проблема в том, что у меня есть Object "data", который действительно является кортежем произвольной длины, который я должен перебирать для создания ячеек (просто с data._1.toString,...).

Так как нет , я не знал супертипа до Tuple1-22, я cant не мог просто делать data.asInstanceOf[Tuple].productIterator foreach {…}

Что я могу сделать?


Ниже ответ сказал, что на самом деле есть черта для всех кортежей - Product - предоставление желаемой функции foreach.

Ответ 1

Все классы TupleX наследуют от Product, который определяет def productIterator : Iterator[Any]. Вы можете вызвать его для итераций через все элементы любого кортежа.

Например:

def toStringSeq(tuple: Product) = tuple.productIterator.map(_.toString).toIndexedSeq