Не удается найти манифест класса для типа элемента T

Попытка скомпилировать код из этого вопроса SO и столкнуться с этим сообщением об ошибке cannot find class manifest for element type T, Вот еще один фрагмент, который показывает поведение:

scala> def f[T](a:T, b:T):Array[T] = { new Array[T](2) }
<console>:4: error: cannot find class manifest for element type T
       def f[T](a:T, b:T):Array[T] = { new Array[T](2) }

я могу увидеть это new collection.mutable.GenericArray[T](2) устраняет проблему Очевидно, что предоставление манифеста - это другой вариант... Но что значит "предоставление манифеста"?

1 ответ

Решение

Для предоставления информации о типе вы можете использовать контекстную границу

def f[T : Manifest](a:T, b:T):Array[T] = { new Array[T](2) }

или манифест в качестве неявного аргумента:

def f[T](a:T, b:T)(implicit manifest : Manifest[T]) : Array[T] = { new Array[T](2) }

Первый является синтаксическим сахаром для последующего. Манифест необходим, потому что информация о типе T отсутствует из-за ошибки общего типа JVM.

Другие вопросы по тегам