2011-08-27 11 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

あなたは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

関連する問題