не удается найти манифест класса для типа элемента T - PullRequest
17 голосов
/ 12 февраля 2010

Пытался скомпилировать некоторый код из этого 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 Ответ

19 голосов
/ 12 февраля 2010

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

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 отсутствует из-за общего типа errasure JVM.

...