2011-08-27 41 views
1

我想從Scala中的文件中讀取序列化對象,恢復類似於Python的pickle的功能。我破碎的物體識別代碼看起來是這樣的: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抽象類型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