0
我有一個通用類型爲T的函數readObjectFromFile
。我怎樣才能知道類型名稱?在Scala中獲得一個通用類型的類名稱
import scala.reflect.runtime.universe.{typeOf, TypeTag}
def name[T: TypeTag] = typeOf[T].typeSymbol.name.toString
name[Int]
res5: String = Int
import java.io._
def readObjectFromFile[T](file: File): T = {
val typeName = name[T]
println(s"read ${typeName} from file $file")
val ois = new ObjectInputStream(new FileInputStream(file))
val v = ois.readObject.asInstanceOf[T]
ois.close()
v
}
cmd19.sc:2: No TypeTag available for T
val typeName = name[T]
PS:我知道我可以使用v.getClass.getName,但這後進行閱讀的對象。我想在閱讀對象之前打印這些信息。
您通常希望將'ois.readObject'包裝在'try'中,並將'close'放在'finally'中,這樣您就不會在文件失敗時保持關閉狀態。 –
或甚至更好地使用scala中的資源分配;這不是生產代碼;它只是一個最小,完整和可驗證的示例:https://stackoverflow.com/help/mcve –