Scala-массивы и параметризованные типы - PullRequest
4 голосов
/ 13 января 2012

Я пытаюсь определить универсальный класс, который принимает параметризованный тип T, а затем использовать этот тип в определении массива в классе. Я написал следующее, которое, как мне казалось, должно работать

class MyClass[T] {

  val myarr:Array[T] = new Array[T](10)

}

Но компилятор жалуется на следующее

  • не может найти манифест класса для типа элемента T
  • значение newArray не является членом Null

Кто-нибудь знает, что здесь происходит и чем это не радует?

1 Ответ

9 голосов
/ 13 января 2012

Компилятор должен знать, как создавать экземпляры вещей типа T. В традиционном Java-способе обработки обобщенных типов посредством стирания типов это невозможно сделать разумным образом; компилятор просто говорит: «Эй, я не знаю, что такое T, поэтому я не чувствую себя так хорошо, позволяя вам создавать такие T». В Scala, однако, есть слово для этого: манифесты. Чтобы включить манифест для T, просто измените первую строку этого кода на

class MyClass[T : Manifest] {

Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...