Не может найти манифест класса для типа элемента 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) }
Первый - синтаксический сахар для более позднего. manifest необходимо, потому что информация о типе о Т отсутствует из-за общего type unasure JVM.