Не удается найти манифест класса для типа элемента 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.