2011-08-27 4 views
1

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

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 снят, так как она удаляется стиранием». Каков правильный способ сделать это?

ответ

1

Вы можете использовать implicits обойти типа стирания, как описано в this blog post:

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") 
    } 
} 
+0

Спасибо, что отлично работает – emchristiansen

Смежные вопросы