Попытка состояла в том, чтобы скомпилировать некоторый код от этого ТАК вопрос и столкнуться с этим сообщением об ошибке cannot find class manifest for element type T
. Вот другой отрывок, который показывает поведение:
scala> def f[T](a:T, b:T):Array[T] = { new Array[T](2) }
: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)
устраняет проблему. По-видимому, обеспечение декларации является другой опцией... Но что делает "обеспечение средней декларации"?
Для предоставления информации о типе можно использовать контекстную привязку
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.