Scala: чтение сериализованного объекта из файла - PullRequest
1 голос
/ 27 августа 2011

Я хотел бы прочитать сериализованный объект из файла в Scala, восстанавливая функциональность, аналогичную описанию Python.Мой код чтения поврежденных объектов выглядит следующим образом:

def ReadObjectFromFile[A](filename: String): A = {
  val input = new ObjectInputStream(new FileInputStream(filename))
  val obj = input.readObject()
  obj match {
    case a: A => a
    case _ => sys.error("Type not what was expected when reading from file")
  }
}

Однако этот код приводит к предупреждению «абстрактный тип A в шаблоне типа A не проверяется, поскольку он удаляется удалением».Как правильно это сделать?

1 Ответ

1 голос
/ 27 августа 2011

Вы можете использовать импликации, чтобы обойти удаление типа, как описано в этом сообщении в блоге :

def ReadObjectFromFile[A](filename: String)(implicit m:scala.reflect.Manifest[A]): A = {
  val input = new ObjectInputStream(new FileInputStream(filename))
  val obj = input.readObject()
  obj match {
    case x if m.erasure.isInstance(x) => x.asInstanceOf[A]
    case _ => sys.error("Type not what was expected when reading from file")
  }
}
...