Итак, проблема в том, что .map
возвращает ArraySeq
вместо Array
, когда нет информации о типе элементов массива во время компиляции.Это потому, что вам нужен фактический класс для элементов: Array.newInstance(clazz, numElements)
.Когда вы указываете тип элемента как просто T
, он недоступен, поэтому, когда вы делаете .map
, он переключает тип контейнера на ArraySeq
, чтобы обойти это ограничение.
Один из способов - передать информацию о классе вашему классу:
class MaObj[T : ClassTag : Ordering](val arr : Array[T])
(это эквивалентно class MaObj[T](val arr: Array[T])(implicit ev1: ClassTag[T], ev2: Ordering[T])
. Это передает неявный параметркласс, который позволяет ему разрешать тип элемента во время выполнения.
Другой способ, если вы действительно просто хотите скопировать массив без преобразования его элементов, вы можете просто использовать .clone
, как предлагает другой ответ.Это также намного эффективнее.
Или просто для начала используйте IndexedSeq
вместо Array
, лучше в любом случае.